删除与模式匹配的所有Excel绘图图层形状

时间:2010-12-03 19:02:55

标签: excel excel-vba vba

考虑一个有很多形状的Excel工作表。要选择两种形状:

ActiveSheet.Shapes.Range(Array("Freeform 314", "Freeform 278")).Select

目标是删除所有以“Freeform”开头的形状。

我找到了一个引用 MS VBScript Regular Expression 5.5 的示例,但形状不驻留在特定单元格上。形状的数量或具体数量几乎是不可靠的。因此,一个丑陋的解决方案可以强制使用字符串名称,另一方面,我希望您可以帮助我实现优雅的解决方案。

以下代码不起作用,但您可以更好地了解问题。

Sub DeleteShapes()

    Dim re As New RegExp
    re.Pattern = "Freeform*"
    Dim cell As Range
    For Each cell In ActiveSheet.Shapes.Range(Array(re.Pattern)).Select
       Selection.delete
    Next cell
End Sub

2 个答案:

答案 0 :(得分:4)

您根本不需要正则表达式来查找自由形状。

Dim shape As Excel.shape

For Each shape In ActiveSheet.Shapes

    If Left(shape.Name, 8) = "Freeform" Then
        shape.Delete
    End If

Next

答案 1 :(得分:3)

如果你去的话,似乎这样会更容易

Dim shape as Variant
For each shape in ActiveSheet.Shapes
   If instr(1, shape.Name, "Freeform") <> 0 then shape.delete
Next shape

测试它并且它有效。它会在活动工作表上获取整个形状集合,如果单词“Freeform”在形状名称中,则会删除它。

如果您只想专门删除以“Freeform”开头的形状,那么请不要测试: instr(1,shape.Name,“Freeform”)&lt;&gt; 0 你应该使用: instr(1,shape.Name,“Freeform”)= 1

相关问题