我有一个excel工作表,其中绑定到按钮的宏根据工作表中的用户输入参数绘制动态形状。
我正在尝试编写一个新宏来清理工作表,换句话说,删除工作表中的所有形状。
我尝试使用下面的代码,它确实删除了所有形状,但是按钮形式控件也会在此过程中被删除。有没有一种简单的方法可以摆脱工作表中的形状(箭头,文本框,椭圆等)?非常感谢!
Sub DeleteAllShapes()
Dim Shp As Shape
For Each Shp In ActiveSheet.Shapes
Shp.Delete
Next Shp
End Sub
答案 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