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

Word VBAで全画像を削除する

動作検証バージョン:64bit Windows 10 Pro + 32bit Word(バージョン2105 ビルド14026.20308 Microsoft Store)

「vba ワード 画像 削除」
「word vba 全ての 画像削除」
といった検索キーワードで、時折アクセスがあります。

[スポンサードリンク]

浮動オブジェクトの画像をすべて削除するサンプル

以下のSubプロシージャを実行すると、アクティブ文書内の浮動オブジェクトとしての画像が、すべて削除されます。

Sub 全画像を削除する_Shape()
 Dim i As Long
 With ActiveDocument.Shapes
  For i = .Count To 1 Step -1
   If .Item(i).Type = msoPicture Then
     .Item(i).Delete
   End If
  Next
 End With
End Sub

Excel VBAユーザーのためのWord VBA入門(1)』の、「1-3. Excel VBAユーザーがWord VBAで注意すべき点」でも触れているとおり、For Each~Nextループの挙動が、Excel VBAとWord VBAで異なる場合があります。

Shapesに対するFor Each~Nextループが、その代表例です。Excel VBAの場合、For Each~NextループでShapeの削除処理が可能ですが、Word VBAではダメです。一部のShapeが残ってしまうケースがあります。

そのため上記のSubプロシージャでは、For~Nextループを「Step - 1」で回しています。

画像かどうかの判定は、Shape.Typeプロパティが、msoPictureであるかで行っています。

  If .Item(i).Type = msoPicture Then

行内オブジェクトの画像をすべて削除するサンプル

以下のSubプロシージャを実行すると、アクティブ文書内の行内オブジェクトとしての画像が、すべて削除されます。

Sub 全画像を削除する_InlineShape()
 Dim i As Long
 With ActiveDocument.InlineShapes
  For i = .Count To 1 Step -1
   If .Item(i).Type = wdInlineShapePicture Then
    .Item(i).Delete
   End If
  Next
 End With
End Sub

浮動オブジェクトの場合と考え方は同じですが、オブジェクトが違います。

InlineShapesコレクションに対して「Step - 1」でFor~Nextループを回して、

 With ActiveDocument.InlineShapes
  For i = .Count To 1 Step -1

InlineShape.Typeプロパティの戻り値がwdInlineShapePictureのときに削除を行っています。

  If .Item(i).Type = wdInlineShapePicture Then 
   .Item(i).Delete

最終更新日時:2021-09-29 06:29

[スポンサードリンク]

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

「Shape・図形」の記事一覧

検索


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

.