Wordで全ての図形を削除するマクロ

Pocket

Wordの文書上にある全ての図形を削除するマクロを考えます。
「ActiveDocument.Shapes」を使うとアクティブな文書(Document)にある図形を取得できます。
まず思い付く方法は「For Each」を使って処理する方法です。次のようなコードになります。

Sub shape_delete_bad()
    Set myshapes = ActiveDocument.Shapes
    For Each s In myshapes
        s.Delete
    Next
End Sub

しかし正しく処理されません。一つおきに削除されます。
次のように考えられます。
「For Each」ループで、まず1番目の図形を削除します。
次に2番目の図形を削除しますが、先程の図形削除後の2番目なので元の順番では3個目の図形です。
この結果、元の2個目の図形が残ってしまいます。
図形の削除

これを踏まえて次のようなコードを考えます。
「Do While」ループを使い、図形の個数が0より大きいときだけ処理します。個数が0になれば終了です。

Sub shape_delete_1()
    Set myshapes = ActiveDocument.Shapes
    Do While myshapes.Count > 0
         myshapes(1).Delete
    Loop
End Sub

もう一つの方法は次の通りです。
最後の図形から最初の図形まで遡るようにして処理します。

Sub shape_delete_2()
    Set myshapes = ActiveDocument.Shapes
    For i = myshapes.Count To 1 Step -1
         myshapes(i).Delete
    Next i
End Sub

[ 2013年5月31日 | カテゴリー: Word | タグ: , , ]

« | »

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

送信してください。


タグ

カテゴリー

最近の投稿

最近のコメント

固定ページ

アーカイブ

stabucky

写真

メタ情報