「word vba shape 削除」
といった検索キーワードで、このサイト・インストラクターのネタ帳へのアクセスが、時折あります。
Word VBAではFor Each~Nextループで図形を削除できない
Excel VBAの場合は、
Sub sample()
Dim shp As Shape
For Each shp in ActiveSheet.Shapes
shp.Delete
Next
End Sub
といったマクロで、アクティブなシート上の図形を削除できます。
同じ考え方で、以下のようなSubプロシージャでアクティブ文書の図形をすべて削除できると考え試したものの、図形が削除できなかったのかもしれません。
Sub sample_bad_result()
Dim shp As Shape
For Each shp in ActiveDocument.Shapes
shp.Delete
Next
End Sub
Excel VBAと、Word VBAやPowerPoint VBAでは、For Each~Nextループの動きが異なることがあり、コレクションに含まれる単一オブジェクトの数が変化するようなFor Each~Nextループは、期待したとおりの結果にならないケースがあります。
Shapeの削除も、その一つです。
Word VBAではFor Each~NextループでShapeオブジェクトを削除しようとしても、上手くいきません。
アクティブ文書のShapeをすべて削除するサンプルマクロ
以下のようなFor~Nextループを使ったマクロにすれば、アクティブ文書の図形をすべて削除できます。With ActiveDocument.Shapes
Dim i As Long
For i = .Count To 1 Step -1
.Item(i).Delete
Next
End With
End Sub
一般に、For Each~Nextループは、For~Nextループでも書くことができます。
For~Nextループを「Step -1」で回してやれば、Word VBAでShapeオブジェクトを削除できます。
最終更新日時:2020-04-20 13:21
- Newer:VBAでグラフシートをブックの最後に追加するには?
- Older:Excelシートを順番に処理するJScript
Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » Word VBAでShapeをすべて削除する