2010-12-03 44 views
3

考慮一個包含許多形狀的Excel工作表。要選擇兩種形狀:刪除所有與圖案匹配的Excel繪圖圖層形狀

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

的目標是要刪除所有的形狀開始「自由形式」

我找到一個引用的MS示例MS VBScript正則表達式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 

回答

3

好像如果你去

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

測試,它的工作原理是將遠遠容易得多。它將活動工作表上的所有形狀集合,並且如果單詞「Freeform」位於形狀名稱中,則它將刪除它。

如果你想專門只刪除形狀開始 「任意格式」,然後代替測試: INSTR(1,shape.Name, 「自由形式」)<> 0 你應該使用: INSTR(1,形狀.Name,「Freeform」)= 1

+1

非常感謝,喜歡這個解決方案 – 2010-12-03 19:18:14

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

非常感謝! – 2010-12-03 19:17:26