考虑一个有很多形状的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
答案 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