2014-09-10 146 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