Home » ワードマクロ・Word VBAの使い方 » ヘッダー・フッター » Word VBAでヘッダーをまとめて編集する

Word VBAでヘッダーをまとめて編集する

対象:Word2007, Word2010, Word2013

「word マクロ ヘッダーの編集」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがありました。

ヘッダーを編集するWordマクロ・VBA(Visual Basic for Applications)のコードを探している方による検索です。

編集というキーワードが何を意味しているのかわかりませんので、ここではヘッダーをまとめて変更するマクロをご紹介しておきます。

[スポンサードリンク]

アクティブ文書のヘッダーを一括変更するサンプルマクロ

以下のようなマクロで、アクティブな文書の、すべてのセクションの、すべてのヘッダーに、中央揃えで「コントソ株式会社」というヘッダーを挿入することができます。

Sub アクティブ文書にヘッダーを入れる()

 Const str = "コントソ株式会社"

 Dim sec As Section
 Dim hdr As HeaderFooter

 For Each sec In ActiveDocument.Sections
  For Each hdr In sec.Headers
   With hdr.Range
    .Text = str
    .Paragraphs.Alignment = wdAlignParagraphCenter
   End With
  Next hdr
 Next sec

End Sub

オブジェクトの階層構造

上記のマクロで利用しているオブジェクトの階層構造は以下のとおりです。

ヘッダーをまとめて編集するWordマクロ

ヘッダー・フッターは、セクションごとに設定することができて、更に、先頭ページだけ別の指定を行ったり、奇数ページと偶数ページで別の指定をしたりといったことができる関係で、階層がかなり深く、複雑です。

サンプルマクロの解説

このマクロで行っている処理は以下のとおりです。

アクティブな文書のすべてのセクションに対するFor Each~Nextループを開始します。
 For Each sec In ActiveDocument.Sections

ActiveDocumentプロパティで、アクティブな文書を表すDocumentオブジェクトを取得して、DocumentオブジェクトのSectionsプロパティで、全セクションを表すSectionsコレクションオブジェクトを取得しています。

セクションに対するループの中で、個々のセクションに含まれる、すべてのヘッダーに対するFor Each~Nextループを開始します。
  For Each hdr In sec.Headers

SectionオブジェクトのHeadersプロパティで、すべてのヘッダーを表すHeadersFootersコレクションオブジェクトを取得できるというのが、オブジェクト式的には珍しく、混乱してしまいしがちな部分でしょう。

ヘッダーをまとめて編集するWordマクロ

取得できるコレクションの名前がHeadersFootersであるために、ヘッダーもフッターも含まれているようなコレクションをイメージしてしまいがちですが、Headersプロパティで取得した場合は、ヘッダーだけを表すコレクションオブジェクトであるという点に注意が必要です。その意味も込めてここでは変数名を「Header」からとった「hdr」としています。(なお、SectionオブジェクトのFootersプロパティを使うと、フッターだけを表すHeadersFootersコレクションを取得できます)

個々のヘッダーのRangeオブジェクトのTextプロパティで、ヘッダーに表示する文字列を指定して、
   With hdr.Range
    .Text = str

RangeオブジェクトのParagraphsプロパティで、ヘッダーの全段落を表すParagraphsコレクションオブジェクトを取得して、段落の左右の配置を表すAlignmentプロパティを設定しています。
    .Paragraphs.Alignment = wdAlignParagraphCenter

開いている全文書のヘッダーを一括変更するサンプルマクロ

開いているすべての文書のすべてのヘッダーを一括変更するには以下のようなマクロです。

Sub 全文書にヘッダーを入れる()

 Const str = "コントソ株式会社"

 Dim doc As Document
 Dim sec As Section
 Dim hdr As HeaderFooter

 For Each doc In Documents
  For Each sec In doc.Sections

   For Each hdr In sec.Headers
    With hdr.Range
     .Text = str
     .Paragraphs.Alignment = wdAlignParagraphCenter
    End With
   Next hdr

  Next sec
 Next doc

End Sub

開いている全文書に対するFor Each~Nextループの中で、
 For Each doc In Documents

先のアクティブ文書の全ヘッダーをまとめて変更するマクロと同じ処理を行っています。
  For Each sec In doc.Sections
   For Each hdr In sec.Headers
    With hdr.Range
     .Text = str
     .Paragraphs.Alignment = wdAlignParagraphCenter

先の、アクティブ文書のヘッダーを編集するマクロよりも、オブジェクトの階層構造は以下のように、一階層深くなっています。(Documentオブジェクトの上にDocumentsコレクションオブジェクトが増えています)

ヘッダーをまとめて編集するWordマクロ

[スポンサードリンク]

Home » ワードマクロ・Word VBAの使い方 » ヘッダー・フッター » Word VBAでヘッダーをまとめて編集する

「ヘッダー・フッター」の記事一覧

検索


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

.