2014-09-10 163 views
0

保存工作簿(wbk_New)时,我从另一个工作簿(wbk_Old)复制粘贴一组形状时遇到1004运行时错误。我应该告诉wbk_Old的宏被分配给这个组。excel vba复制粘贴形状和saveas 1004错误

wbk_Old.Worksheets("DashBoard").Activate 
ChartTop = ActiveSheet.Shapes("Group_VesselGraphics").Top 
ChartLeft = ActiveSheet.Shapes("Group_VesselGraphics").Left 
ActiveSheet.Shapes("Group_VesselGraphics").OnAction = "" 
ActiveSheet.Shapes("Group_VesselGraphics").Copy 

wbk_New.Worksheets("DashBoard").Activate 
ActiveSheet.Shapes("Group_VesselGraphics").Delete 
ActiveSheet.Paste 
ActiveSheet.Shapes("Group_VesselGraphics").Top = ChartTop 
ActiveSheet.Shapes("Group_VesselGraphics").Left = ChartLeft 
ActiveSheet.Shapes("Group_VesselGraphics").OnAction = "'" & ActiveWorkbook.Name & "'!UpdateShipGraph" 

wbk_Old.Close 
wbk_New.SaveAs As path_Old 

我找不出是什么原因导致这个错误......有没有人已经遇到过这个问题?

非常感谢您的帮助!

(我忘了提及,图表也属于这个组的形状!)

+0

您可以发布确切的错误信息的截图? – 2014-09-10 17:01:37

+0

如果我想手动保存,我有一个excel的“修复”弹出窗口说:“损坏的文件是如此广泛,以至于无法进行修复.Excel尝试保存您的公式和值,但有些数据可能已丢失或损坏。“ – JiB 2014-09-10 17:03:13

+0

好像你的excel文件已损坏。是否可以从头开始创建一个新文件并测试代码? – 2014-09-10 17:04:23

回答

0

好吧,我不明白为什么,但似乎有些环节仍然“wbk_New”和“wbk_Old”之间存在尽管我打破了所有的链接并更新了图表来引用内在数据。 因此,关闭“wbk_Old”无法正常执行,并且wbk_New已损坏,因此无法保存。

我发现解决此问题的唯一方法是在关闭wbk_Old之前保存(本身)wbk_New,然后调用外部进程,用wbk_New替换wbk_Old,使用4s的延迟,并关闭wbk_New和Old在延迟完成之前。 我不得不承认,这是一个丑陋的解决方案,如果有人知道一个更好的方式,它将很高兴分享!

这里下面是我的解决方案的代码,其中BatchCmd创建命令的批处理文件和外壳是:

{code above} 
wbk_New.Save 
cmd = "ping -n 4 127.0.0.1 >nul" + vbCrLf 
cmd = cmd + "move /Y " & path_New & " " & path_Old 
Call BatchCmd(cmd, status:=vbHide) 
wbk_Old.Close 
wbk_New.Close