2013-04-09 79 views
2

我被一個用戶要求在他們創建的Excel書中運行一個宏,以便自動執行一個過程。我通過cscript從Java調用宏。我不是任何想象力的VBA程序員,但代碼效率低下,並且簡單地複製/粘貼一遍又一遍。Excel VBA優化

當我從Java運行宏,我得到以下錯誤:

運行時錯誤「1004」:範圍類的 CopyPicture方法失敗

當我進入工作簿不會發生此錯誤並手動點擊啓動這個宏的按鈕。

我一直在閱讀如何使用.Activate/Selection/.Select/etc可以真正減慢代碼並導致這種類型的問題。

這是一個連續使用的代碼塊(而不是在過程/函數調用中)。它不斷在「Selection.CopyPicture」行上拋出錯誤。

任何援助優化這個塊將不勝感激。

ActiveSheet.ChartObjects("Chart 9").Activate 
ActiveChart.Pictures.Delete 
Range("InvGrid").Select 
Selection.CopyPicture Appearance:=xlScreen, Format:=xlPicture 

ActiveSheet.ChartObjects("Chart 9").Activate 
ActiveChart.ChartArea.Select 
ActiveChart.Paste 
Application.CutCopyMode = False 
ActiveSheet.ChartObjects("Chart 9").Activate 
ActiveChart.ChartArea.Select 
ActiveChart.Export "C:\ABC.gif", "GIF", False 

VBS通過csript從Java推出

Dim xlsWorkbook 
Dim objExcel 
Set objExcel = CreateObject(\"Excel.Application\") 
objExcel.Application.DisplayAlerts = False 
Set xlsWorkbook = objExcel.WorkBooks.Open(\"" + xlsmFilepath + "\", 3) 
objExcel.Application.Run(xlsWorkbook.Name & \"!ExportCharts\") 
xlsWorkbook.Save 
xlsWorkbook.Close 
objExcel.Quit 

回答

3

事情是這樣的,也許:

Dim cht As Chart 
Set cht = ActiveSheet.ChartObjects("Chart 9").Chart 
ActiveSheet.Range("InvGrid").CopyPicture Appearance:=xlScreen, Format:=xlPicture 
With cht 
    If .Pictures.Count > 0 Then .Pictures.Delete 
    .Paste 
    .Export "C:\ABC.gif", "GIF", False 
End With 
+0

謝謝你的回覆添。提供的建議在「運行時錯誤'1004'的錯誤文本中給出了1004錯誤:方法'粘貼'對象'_Chart'失敗」...我需要離開我的辦公室,但我不要感激任何進一步的建議 – KKlucznik 2013-04-09 21:12:41

+0

好吧,它在Excel 2010中對我有用,所以我不確定這個問題可能是什麼。腳本運行時Excel是否可見? – 2013-04-09 21:18:49

+0

宏也駐留在Excel 2010中。就像我說的,如果宏是通過Excel中的按鈕手動運行的,那麼我不會遇到任何錯誤。我發佈了從Java啓動的VBS,所以也許可以添加一些線索?腳本運行時,工具欄中不會顯示Excel圖標。我可以看到Excel exe在進程中啓動,但出現的第一個對話框是運行時錯誤。 – KKlucznik 2013-04-10 14:02:31