除了表单控件,删除Excel工作表中的所有形状

我有一个Excel工作表,其中与button绑定的macros根据工作表中的用户input参数绘制dynamic形状。

我正在尝试编写一个新的macros来清理工作表,换句话说删除工作表中的所有形状。

我尝试使用下面的代码,它确实删除所有形状,但是button窗体控件也被删除的过程中。 有没有简单的方法来摆脱工作表中的形状(箭头,文本框,椭圆等)? 感谢一堆!

Sub DeleteAllShapes() Dim Shp As Shape For Each Shp In ActiveSheet.Shapes Shp.Delete Next Shp End Sub 

要删除自动形状和文本框,只能使用:

 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 

或者,您可以反过来指定不删除的types。 您可以使用枚举types,但使用types名称更具可读性。 以下片段将删除窗体控件和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形状types的完整列表。 http://msdn.microsoft.com/en-us/library/office/aa432678(v=office.12).aspx

罗恩·德·布鲁恩(Ron de Bruin)收集了很多可能与其他人有关的摘录。 http://www.rondebruin.nl/controlsobjectsworksheet.htm