2016-02-25 96 views
0

我注意到我的工作表正在放慢速度,发现一些对象是由于某种原因而创建的。我跑到下面的宏以将它们全部删除:VBA删除所有形状错误

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) 

并得到我试图Go To Special和选择的对象数量41152.,但如果这个数字是正确的我的电脑崩溃试图选择了41K对象一次。

任何建议如何将它们全部删除?

+1

奇怪的是,你有你的表'41152'的形状!并且第一位代码失败。如果你尝试向后反转形状(如下所示):如果x = i为0步骤-1:工作表(“Sheet1”)。Shapes(x).Delete:Next') –

+0

这样也会出现同样的错误。我想知道它是否无法处理一次删除这么多。有没有办法将它限制在前1000个左右?如果它摆脱它们,它会高兴地运行它40次! –

+0

尝试'Activesheet.DrawingObjects.Delete'? – Rory

回答

1

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

像这样:

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