マクロで、ヘッダーやフッターにページ番号を入れたい場合、
「キー操作を記録する」の操作手順のままでは危険なコードになります。
とはいっても、ちゃんと、
対象のドキュメントがアクティブになってて、
マクロが動いている間、キー操作をしないなどでは、
正しく操作すると思いますが、
動作が遅いし、ウインドウの分割をしているとか、
思わぬ理由で動かなかったりします。
だからといって、
「キー操作の記録」が使えないってことはありません。
じゃんじゃん使います。
普段のキー操作の記録に関しては、
文字列などを選択して、
セレクションに対して操作をしている場合が多いですが、
セレクションを、Rangeに読み替えて
マクロを書けばだいたい、OKになります。
しかし、ヘッダーへの書き込みでは、
次のコードのように、
画面の選択に依存するコードになって、
どう参考にすればよいかわかりません。
1 2 3 4 5 6 7 8 |
'ヘッダー編集画面に入る ActiveWindow.ActivePane.View.Type = wdPrintView ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageHeader 'フィールドコードでページ番号を追加 Selection.Fields.Add Range:=Selection.Range, Type:=wdFieldEmpty, Text:= _ "PAGE ", PreserveFormatting:=True 'メイン画面編集画面に戻る。ただ、エスケープキーを押しているだけ Selection.EscapeKey |
画面選択などをせず、直接的に、ヘッダーに操作するためには、
Document : Section : Headers : Range
に対して、ページ番号のフィールドコードを追加します。
以下のサブルーチンの、doc に ドキュメントを渡せばOKです。
使用例:
add_page_num_to_header ActiveDocument
セクションごとに、別に振り直すコードになっています。
そんなつもりがなければ、Sections(1) だけ、設定すれば、
セクションによらず連番で設定されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Private Sub add_page_num_to_header(doc As Document) Dim sct As Section For Each sct In doc.Sections '最初のページも同じheader, footer sct.PageSetup.DifferentFirstPageHeaderFooter = False '奇数と偶数で同じheader, footer sct.PageSetup.OddAndEvenPagesHeaderFooter = False '各セクションのプライマリヘッダーに対して With sct.Headers(wdHeaderFooterPrimary) '前のセクションと別設定にする .LinkToPrevious = False 'ページ番号のフィールドコードを追加 .Range.Fields.Add .Range, , "PAGE \* Arabic ", True ’ページ番号は1から始める .PageNumbers.StartingNumber = 1 '1ページ目も表示。ヘッダーを1ページ目も個別にしていないのでいらないが念のため設定 .PageNumbers.ShowFirstPageNumber = True End With Next End Sub |
コメント