2016-02-25 45 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