2013-04-09 103 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