最近、複数のセクションに分かれた、200ページほどのWord文書を編集しています。
そのWord文書で、フッターを細かく設定したくなり試行錯誤した結果、罫線の存在しない1行×3列の表を挿入することにしました。
その表内セルの縦方向の配置を変更するための、Wordマクロを作りました。
本文内の表であれば、スタイルを作るほうが良かったと思うのですが、複数セクションの複数フッター内の表であるため、マクロで設定するほうが便利だろと、2024年4月時点の私は判断しました。
フッターの表内セルの垂直方向配置を設定するサンプルマクロ
以下のWordマクロを実行すると、アクティブなWord文書の、全セクションの全フッターの表内セルの垂直方向配置が下揃えになります。
Dim sec As Section
For Each sec In ActiveDocument.Sections
Dim ftr As HeaderFooter
For Each ftr In sec.Footers
If ftr.Range.Tables.Count = 0 Then Exit For
Dim cel As Cell
For Each cel In ftr.Range.Tables(1).Rows(1).Cells
cel.VerticalAlignment = wdCellAlignVerticalBottom
Next cel
Next ftr
Next secEnd Sub
サンプルマクロで行っている処理
全セクションに対するFor Each~Nextループの中で、
Dim sec As Section For Each sec In ActiveDocument.Sections
全フッターに対するFor Each~Nextループを使用するのは、
Dim ftr As HeaderFooter For Each ftr In sec.Footers
複数セクションの複数のヘッダー&フッターを操作する際の基本といえる構造です。
この2重のFor Each~Nextループの中で、表のセルに対するFor Each~Nextループを回しています。
Dim cel As Cell For Each cel In ftr.Range.Tables(1).Rows(1).Cells
今回は1行だけの表をフッターに作成しているので、Inキーワードの後ろを「ftr.Range.Tables(1).Rows(1).Cells」と指定しています。
拙著『Excel VBAユーザーのためのWord VBA入門(2): Tableの基本編』の[13-3. Rowの特徴的なプロパティ]で、以下のようなコードをご紹介しています。
Dim cel as Cell, txt As String
For Each cel In ActiveDocument.Tables(1).Rows(1).Cells
cel.Select
txt = cel.Range.Text
MsgBox Left(txt, Len(txt) - 2)
Next
表の存在する場所が、本文かフッターかという違いはあるものの、表の1行目の全セルを処理するという観点では本記事のサンプルマクロと同じ構造です。
Dim cel As Cell For Each cel In ftr.Range.Tables(1).Rows(1).Cells
3重のFor Each~Nextループ内で、拙著の[10-4. Cellの特徴的なプロパティ]でも紹介しているCell.VericalAlignmentプロパティを使って、垂直方向配置を設定しています。
cel.VerticalAlignment = wdCellAlignVerticalBottom
全フッターに対して処理をする関係で、表の存在しないフッターもあり得るため、全フッターに対するFor Each~Nextループに入ってすぐの時点で、表が無ければFor Each~Nextループを抜けるようにしています。
Dim ftr As HeaderFooter For Each ftr In sec.Footers If ftr.Range.Tables.Count = 0 Then Exit For
Home » ワードマクロ・Word VBAの使い方 » ヘッダー&フッター » フッターの表内セルの垂直方向配置を設定するWordマクロ