我在Excel工作簿中使用以下代码将屏幕截图的内容粘贴到图表中,然后将图像导出为PNG文件。这个脚本在一台机器上按预期执行,但在另一台机器上运行失败"使用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
答案 0 :(得分:0)
不使用do while循环尝试使用For Each循环,只有在对象存在时才会循环,并且应该防止与索引的差异
For Each Shp in WS.Shapes
Shp.Delete
Next Shp
看看是否能解决问题。
-----------------新消息----------------
设置canvas = ws.ChartObjects.Add(10,10,GetSystemMetrics(DESKTOPX),GetSystemMetrics(DESKTOPY))。 canvas.Paste<<< ----这是什么粘贴?
并且canvas.Shapes(1)将返回此错误的唯一原因是此图表上没有形状....你在调试时检查了吗?
-------------- NEW MESSAGE --------------------
另一个注意事项是你想要扩展什么?图表上的图表或其他东西?如果我没记错的话,层次结构是这样的 工作表>形状>图表> ChartObjects等等,所以如果你试图缩放图表,你应该能够直接从你的变量' canvas'因为这是一个图表对象'已经