【发布时间】:2016-02-25 16:34:58
【问题描述】:
我注意到我的工作表正在放慢速度,并发现由于某种原因创建了一些对象。我运行以下宏将它们全部删除:
Dim Shp as Shape
For Each Shp In Worksheets("Sheet1").Shapes
Shp.Delete
Next Shp
但是我不断收到The index into the specified collection is out of bounds 错误。所以我做了以下操作来查看创建了多少对象:
Dim i As Long
i = ActiveSheet.Shapes.Count
MsgBox CLng(i)
并收到编号 41152。我已尝试 Go To Special 并选择了对象,但如果此编号正确,我的计算机在尝试一次选择超过 41K 对象时崩溃。
任何建议如何删除它们?
【问题讨论】:
-
很好奇您的工作表上有
41152形状!而且第一段代码失败了。如果您尝试在形状中后退一步会发生什么(例如:For x = i To 0 Step -1: Worksheets("Sheet1").Shapes(x).Delete: Next) -
以这种方式也得到相同的错误。我想知道它是否不能一次删除这么多。有没有办法可以将它限制在前 1000 个左右?如果摆脱它们,它会很高兴地运行它 40 次!
-
试试
Activesheet.DrawingObjects.Delete? -
@TimWilkinson - 太好了,这就是我在第一篇文章中的建议。 (我理所当然地认为
i已设置为您在上面的代码中已经设置的:) ...这就是我假设的结果:) ...啊,是的,我也看到了。我不记得shapes集合是基于1还是0的数组。