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

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

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

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

我find了一个引用MS VBScript正则expression式5.5的示例,但形状不驻留在特定的单元格上。 形状的数量或具体数量几乎是未知的。 所以一个丑陋的解决scheme可能是蛮横的string的名字,另一方面,我希望你能帮助我实现一个优雅的解决scheme。

下面的代码不起作用,但你可以更好地了解这个问题。

 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 

如果你去了,似乎这样会容易得多

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

testing它,它的工作。 它将活动工作表上的所有形状集合,并且如果单词“自由forms”在形状名称中,则将其删除。

如果只想特别删除以“Freeform”开头的形状,则不用testing:instr(1,shape.Name,“Freeform”)<> 0您应该使用:instr(1,shape.Name,“Freeform”) = 1

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

 Dim shape As Excel.shape For Each shape In ActiveSheet.Shapes If Left(shape.Name, 8) = "Freeform" Then shape.Delete End If Next