14

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

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

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

Sub DeleteAllShapes()

Dim Shp As Shape

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

End Sub
4

1 回答 1

21

要仅删除自选图形和文本框,您可以使用:

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

于 2012-10-08T21:42:14.710 回答