【问题标题】:Delete all shapes in excel worksheet except form controls删除excel工作表中除表单控件外的所有形状
【发布时间】:2012-09-29 03:54:13
【问题描述】:

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

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

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

Sub DeleteAllShapes()

Dim Shp As Shape

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

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    要删除只有您可以使用的自选图形和文本框:

    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
    

    或者,您可以反过来工作并指定不删除的类型。您可以使用枚举类型,但使用类型名称更具可读性。下面的 sn-p 将删除除 Form Controls 和 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 收集了大量的 sn-ps,可能与遇到此问题的其他人有关。 http://www.rondebruin.nl/controlsobjectsworksheet.htm

    【讨论】:

    • 不幸的是它不起作用:1. 当我执行你的第一个代码时,表单控件和形状都被删除了。 2.第二个效果更好:它删除了形状并单独留下表单控件。但是,这一次“文本框”不会被删除。我几乎可以肯定有一个单行代码可以解决问题,但我不记得了。
    • 你有什么类型的表单控件?我刚刚在 ActiveX 控件复选框和表单控件按钮上测试了它(第二个),它工作正常。
    • 抱歉,我刚刚在看到您的第二条时编辑了我的评论。正如您所说,第二个代码不涉及表单控件,这是完美的。但是,由于某种原因,它不会删除文本框。
    • 已编辑以捕获文本框。我不知道有什么更清洁的方法,但如果你打开一种方法会很高兴。
    • 谢谢,这很好用!如果您可以再次编辑您的帖子(它仍然说第一个避免表单控件但它没有),我会将其作为接受的答案。我将发送另一条评论,让您知道我是否能找到一个可以解决问题的班轮代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多