删除除表单控件之外的Excel工作表中的所有形状

时间:2012-10-08 21:08:14

标签: excel excel-vba vba

我有一个excel工作表,其中绑定到按钮的宏根据工作表中的用户输入参数绘制动态形状。

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

我尝试使用下面的代码,它确实删除了所有形状,但是按钮形式控件也会在此过程中被删除。有没有一种简单的方法可以摆脱工作表中的形状(箭头,文本框,椭圆等)?非常感谢!

Sub DeleteAllShapes()

Dim Shp As Shape

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

End Sub

1 个答案:

答案 0 :(得分:19)

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

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