2012-10-08 63 views
10

我有一個excel工作表,其中與按鈕綁定的宏根據工作表中的用戶輸入參數繪製動態形狀。刪除excel工作表中除窗體控件以外的所有形狀

我想寫一個新的宏來清理工作表,或者換句話說刪除工作表中的所有形狀。

我嘗試使用下面的代碼,它確實刪除了所有形狀,但是按鈕窗體控件也會在過程中被刪除。有沒有簡單的方法來擺脫工作表中的形狀(箭頭,文本框,橢圓等)?感謝一堆!

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    Shp.Delete 
Next Shp 

End Sub 

回答

15

要刪除自選圖形和文本框不僅可以使用:

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Shp.Type = msoAutoShape Or Shp.Type = msoTextBox Then Shp.Delete 
Next Shp 

End Sub 

或者你可以工作周圍的其他方法,並指定類型不刪除。您可以使用枚舉類型,但使用類型名稱更具可讀性。以下片段將刪除表單控件和OLE控件對象以外的所有內容。

Sub DeleteAllShapes() 

Dim Shp As Shape 

For Each Shp In ActiveSheet.Shapes 
    If Not (Shp.Type = msoOLEControlObject Or Shp.Type = msoFormControl) Then Shp.Delete 
Next Shp 

End Sub 

MSO形狀類型的完整列表。 http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

Ron de Bruin有一個很好的片段集,可能與任何其他人遇到此問題相關。 http://www.rondebruin.nl/controlsobjectsworksheet.htm

+0

不幸的是,它不起作用:1.當我執行你的第一個代碼時,表單控件被刪除以及形狀。 2.第二個更好用:它單獨刪除形狀和葉子形式控件。但是,這次「文本框」不會被刪除。我幾乎可以肯定,有一個單線程代碼可以完成這個技巧,但我不記得它。 – marillion

+0

你有什麼類型的表單控件?我剛剛在ActiveX控件複選框和表單控件按鈕上進行了測試(第二項),它工作正常。 –

+0

對不起,我剛剛看到你的第二個我編輯了我的評論。正如你所說,第二個代碼不會觸及表單控件,這是完美的。但是,由於某些原因它不會刪除文本框。 – marillion

相關問題