“指定集合中的索引超出范围”在不同的系统上是不一致的

我使用Excel工作簿中的以下代码将截图的内容粘贴到图表中,然后将图像作为PNG文件导出。 此脚本按预期方式在一台计算机上执行,但在另一台计算机上执行“With canvas.Shapes(1)”时出现以下错误:

Error -2147024809: The index into the specified collection is out of bounds. 

这两台机器都是在Windows 7 Pro上运行的Excel版本14.0.7166.5000(64位)。 我不明白为什么我会得到一台机器上的索引错误,而不是其他。

 Set canvas = ws.ChartObjects.Add(10, 10, GetSystemMetrics(DESKTOPX), GetSystemMetrics(DESKTOPY)).Chart canvas.Paste With canvas.Shapes(1) .ScaleWidth 100, msoTrue .ScaleHeight 100, msoTrue End With canvas.Export FileName, "png" Do While ws.Shapes.Count > 0 ws.Shapes(1).Delete Loop 

而不是使用do while循环尝试使用For Each循环,这只会在对象存在的情况下循环,并且应该防止与索引差异

 For Each Shp in WS.Shapes Shp.Delete Next Shp 

看看是否解决了这个问题。

– – – – – – – – -新消息 – – – – – – – –

Set canvas = ws.ChartObjects.Add(10,10,GetSystemMetrics(DESKTOPX),GetSystemMetrics(DESKTOPY))图表canvas.Paste <<< —-这是什么粘贴?

和canvas.Shapes(1)将返回此错误的唯一原因是当这个图表上没有形状….你debugging时检查?

– – – – – – – 新消息 – – – – – – – – – –

另一个说明是你想要扩大规模? 图表或图表上的东西? 如果我没有记错的话,层次结构就像这张表格>形状>图表>图表对象等等,所以如果你试图缩放图表,你应该可以直接从你的variables“canvas”来做,因为这是一个“图表对象”。