「word vba ヘッダーの図を削除」
という検索で、このサイト・インストラクターのネタ帳へのアクセスが、ありました。
ヘッダー内の図を削除する、Wordマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。
Wordで何らかの図(描画オブジェクト)を自由に扱うには、浮動オブジェクトと行内オブジェクトについて、
理解していることが必須です。VBAからヘッダー内の描画オブジェクトを操作する場合も、この二つ違いの理解は必須です。
ヘッダー内の浮動オブジェクトをすべて削除するサンプルマクロ
以下のようなマクロで、ヘッダー内の浮動オブジェクト(Shapeオブジェクト)をすべて削除することができます。
Dim sec As Section
Dim hdr As HeaderFooter
Dim shp As Shape
For Each sec In ActiveDocument.Sections
For Each hdr In sec.Headers
For Each shp In hdr.Shapes
shp.Delete
Next shp
Next hdr
Next sec
全セクションに対するFor Each~Nextループの中で、
For Each sec In ActiveDocument.Sections
全ヘッダーに対するFor Each~Nextループを回すのは、
For Each hdr In sec.Headers
これまでご紹介してきた全ヘッダーをまとめて処理する系のマクロと同じです。
全Shapeに対するFor Each~Nextループの中で、浮動オブジェクトである全Shapeに対するFor Each~Nextループを回して、
For Each shp In hdr.Shapes
ShapeオブジェクトのDeleteメソッドで削除を行っています。
shp.Delete
ヘッダー内の行内オブジェクトをすべて削除するサンプルマクロ
ヘッダー内の行内オブジェクト(InlineShapeオブジェクト)をすべて削除するのなら、以下のようなマクロです。
Dim sec As Section
Dim hdr As HeaderFooter
Dim isp As InlineShape
For Each sec In ActiveDocument.Sections
For Each hdr In sec.Headers
For Each isp In hdr.Range.InlineShapes
isp.Delete
Next isp
Next hdr
Next sec
全セクションに対するループの中で、全ヘッダーへのFor Each~Nextループを回しているのは、先のマクロと同じです。
For Each sec In ActiveDocument.Sections
For Each hdr In sec.Headers
ヘッダー内の、行内オブジェクトであるInlineShapeオブジェクトを取得するには、ヘッダーを表すHeaderFooterオブジェクトの、RangeオブジェクトのInlineShapesプロパティを利用します。
For Each isp In hdr.Range.InlineShapes
先にご紹介した浮動オブジェクトの場合は、
For Each shp In hdr.Shapes
のように、HeaderFooterオブジェクトからいきなり取得できて、行内オブジェクトの場合は、
For Each isp In hdr.Range.InlineShapes
と、Rangeオブジェクトを経由しないと取得できないのは、浮動オブジェクトと行内オブジェクトの違いをしっかり理解できている方ならば、とても納得しやすいだろうと感じます。
Home » ワードマクロ・Word VBAの使い方 » ヘッダー&フッター » ヘッダー内の図・描画オブジェクトをWord VBAで削除する