【问题标题】:VBA delete all shapes errorVBA删除所有形状错误
【发布时间】: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 的数组。

标签: vba excel


【解决方案1】:

您可以在Shapes 集合中后退一步,将它们从集合Index 中的最后一个值删除到第一个值。

像这样:

i = Worksheets("Sheet1").Shapes.Count
For x = i To 1 Step -1: Worksheets("Sheet1").Shapes(x).Delete: Next

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-13
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 2014-12-02
    • 2021-06-05
    • 2014-01-04
    相关资源
    最近更新 更多