「word マクロ ヘッダーの編集」
という検索で、このサイト『インストラクターのネタ帳』へのアクセスがありました。
ヘッダーを編集するWordマクロ・VBAのコードを探している方による検索です。
編集というキーワードが何を意味しているのかわかりませんので、ここではヘッダーをまとめて変更するマクロをご紹介しておきます。
アクティブ文書のヘッダーを一括変更するサンプルマクロ
以下のようなマクロで、アクティブな文書の、すべてのセクションの、すべてのヘッダーに、中央揃えで「コントソ株式会社」というヘッダーを挿入することができます。
Const TXT = "コントソ株式会社"
Dim sec As Section
Dim hdr As HeaderFooter
For Each sec In ActiveDocument.Sections
For Each hdr In sec.Headers
With hdr.Range
.Text = TXT
.Paragraphs.Alignment = wdAlignParagraphCenter
End With
Next hdr
Next sec
オブジェクトの階層構造
上記のマクロで利用しているオブジェクトの階層構造は以下のとおりです。
ヘッダー・フッターは、セクションごとに設定することができて、更に、先頭ページだけ別の指定を行ったり、奇数ページと偶数ページで別の指定をしたりといったことができる関係で、階層がかなり深く、複雑です。
サンプルマクロの解説
このマクロで行っている処理は以下のとおりです。
アクティブな文書のすべてのセクションに対する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コレクションオブジェクトを取得できるというのが、オブジェクト式的には珍しく、混乱してしまいしがちな部分でしょう。
取得できるコレクションの名前がHeadersFootersであるために、ヘッダーもフッターも含まれているようなコレクションをイメージしてしまいがちですが、Headersプロパティで取得した場合は、ヘッダーだけを表すコレクションオブジェクトであるという点に注意が必要です。その意味も込めてここでは変数名を「Header」からとった「hdr」としています。(なお、SectionオブジェクトのFootersプロパティを使うと、フッターだけを表すHeadersFootersコレクションを取得できます)
個々のヘッダーのRangeオブジェクトのTextプロパティで、ヘッダーに表示する文字列を指定して、
With hdr.Range
.Text = TXT
RangeオブジェクトのParagraphsプロパティで、ヘッダーの全段落を表すParagraphsコレクションオブジェクトを取得して、段落の左右の配置を表すAlignmentプロパティを設定しています。
.Paragraphs.Alignment = wdAlignParagraphCenter
開いている全文書のヘッダーを一括変更するサンプルマクロ
開いているすべての文書のすべてのヘッダーを一括変更するには以下のようなマクロです。
Const TXT = "コントソ株式会社"
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 = TXT
.Paragraphs.Alignment = wdAlignParagraphCenter
End With
Next hdr
Next sec
Next doc
開いている全文書に対するFor Each~Nextループの中で、
For Each doc In Documents
先のアクティブ文書の全ヘッダーをまとめて変更するマクロと同じ処理を行っています。
For Each sec In doc.Sections
For Each hdr In sec.Headers
With hdr.Range
.Text = TXT
.Paragraphs.Alignment = wdAlignParagraphCenter
先の、アクティブ文書のヘッダーを編集するマクロよりも、オブジェクトの階層構造は以下のように、一階層深くなっています。(Documentオブジェクトの上にDocumentsコレクションオブジェクトが増えています)
最終更新日時:2024-04-15 15:16
Home » ワードマクロ・Word VBAの使い方 » ヘッダー&フッター » Word VBAでヘッダーをまとめて編集する