Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » Word VBAでShapeをすべて削除する

Word VBAでShapeをすべて削除する

対象:Word2007, Word2010, Word2013, Windows版Word2016

「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オブジェクトを削除しようとしても、上手くいきません。

Word VBAでは、すべてのオブジェクトがFor Each~Nextループで削除できないというわけでもなく、例えば表の削除はFor Each~NextループでOKです。

アクティブ文書のShapeをすべて削除するサンプルマクロ

以下のようなFor~Nextループを使ったマクロにすれば、アクティブ文書の図形をすべて削除できます。
Sub アクティブ文書の図形をすべて削除する()
 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

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » Shape・図形 » Word VBAでShapeをすべて削除する

「Shape・図形」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.