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

mar*_*ion 13 excel vba excel-vba

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

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

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

Sub DeleteAllShapes()

Dim Shp As Shape

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

End Sub
Run Code Online (Sandbox Code Playgroud)

Jam*_*ull 20

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

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
Run Code Online (Sandbox Code Playgroud)

或者,您可以反过来使用并指定不要删除的类型.您可以使用枚举类型,但使用类型名称更具可读性.以下代码段将删除除窗体控件和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
Run Code Online (Sandbox Code Playgroud)

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

Ron de Bruin收集了大量的片段,这些片段可能与遇到此问题的其他人有关. http://www.rondebruin.nl/controlsobjectsworksheet.htm