2010-12-03 24 views
3

シェイプの多いExcelワークシートを検討してください。 2つの形状を選択するには:パターンに一致するすべてのExcel描画レイヤシェイプを削除する

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

目標は「自由形式」で始まるすべての図形を削除することです。

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 

それをテストし、それが動作を行った場合、これははるかにはるかに簡単になるように思えます。これはアクティブなシート上のシェイプの全体のコレクションを取り、シェイプ名に「フリーフォーム」という単語がある場合は、それを削除します。

あなたは特に "自由形式" で始まる形状のみを削除したい場合は、代わりにテスト:あなたが使用する必要があります INSTR(1、shape.Name、 "自由形式")<> 0 : INSTR(1、形状.Name、 "Freeform")= 1

+1

ありがとう、このソリューションが大好きです –

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

ありがとうございました! –

関連する問題