excel vba复制粘贴一个形状并保存1004错误

时间:2014-09-10 13:41:36

标签: excel vba excel-vba shape

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

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

我无法弄清楚导致此错误的原因......是否有人已经遇到过此问题?

非常感谢你的帮助!

(我忘了提到图表也属于这组形状!)

1 个答案:

答案 0 :(得分:0)

好的,我不明白为什么,但似乎某些链接仍然存在于" wbk_New"和" wbk_Old"虽然我打破了所有链接并更新了图表以引用内在数据。 因此,关闭" wbk_Old"无法正常执行并且wbk_New已损坏,因此无法保存它。

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

下面是我的解决方案的代码,其中BatchCmd创建命令的批处理文件并将其shell:

{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