2

一位用户要求我从他们创建的 Excel 书中运行一个宏,以使流程自动化。我通过 cscript 从 Java 调用宏。无论如何,我都不是 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
4

1 回答 1

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
于 2013-04-09T21:00:20.380 回答