複数のWord文書のページ番号を連番にするマクロです。前の文書の最終ページを取得して次の文書の先頭ページ番号を設定していきます。
ファイル名でソートしたとき、構成順になっていることを前提としています。
例 : 1章_XXXXX.docx、2章_XXXXX.docx、3章-1_XXXXX.docx、3章-2_XXXXX.docx
Sub フォルダー内文書ページ番号の連番化()
Const USERPATH As String = "C:\@test" 'ファイルの場所
Dim oDoc As Document
Dim aPath As String
Dim cnt As Long
Dim pg As Long, pgsum As Long
aPath = Dir(USERPATH & "\*.docx", vbNormal)
Do While aPath <> ""
cnt = cnt + 1
Set oDoc = Documents.Open(USERPATH & "\" & aPath)
With oDoc
'この文書のページ数
pg = .Content.Information(wdNumberOfPagesInDocument)
If cnt = 1 Then
'1番目は変更なしで閉じる
.Close SaveChanges:=False
Else
'2番目以降は開始ページ番号を設定して閉じる
.Sections(1).Footers(wdHeaderFooterPrimary) _
.PageNumbers.StartingNumber = pgsum + 1
.Close SaveChanges:=True
End If
'現在までの総ページ
pgsum = pgsum + pg
End With
aPath = Dir()
Loop
Set oDoc = Nothing
End Sub
フォルダー内の文書をファイル名順に処理する
Dir
関数とDo
~Loop
文で文書ファイルを順番に処理します。
.Information(wdNumberOfPagesInDocument)
.Information
は、指定する範囲ついて引数に応じた情報を返します。ページ数関連の引数は3種類あります。
wdNumberOfPagesInDocument
: 文書全体のページ数wdActiveEndPageNumber
: 指定範囲(セクションなど)のページ数wdActiveEndAdjustedPageNumber
: 指定範囲(セクションなど)の最終ページ番号
サンプルでは、文書のページ数を順次足すことで最終ページ番号を求めていますが、 Document.Sections.Last.Range.Information(wdActiveEndAdjustedPageNumber)
で求めることもできます。
Document.Sections(1)
.Footers(wdHeaderFooterPrimary)
ページ番号の文書内での配置位置です。この例は先頭のセクション、先頭のフッターの場合です。
.PageNumbers.StartingNumber
=
開始ページ番号
文書の開始ページ番号を設定します。