【Word】ページごとにPDF化するには【VBA】
Yahoo!知恵袋の質問に答えた中から、ページごとにPDF化する方法について紹介します。
質問
Yahoo!知恵袋にあった質問は、下記のようなものでした。
20ページのワードを、ページ毎に1ファイルとしてPDFで保存したいのです。
また、各ページの1行目をファイル名としたいのですが、そのようなマクロはできますでしょうか。補足
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12274061647
20ページで1ファイルのワードが50以上、計1000ページ以上になります。
回答
私の回答はこんな感じです。
Option Explicit
Public Sub EachPage2PDF()
Dim pg As Page
Dim doc As Document
Dim lNum As Long
Dim stName As String
Set doc = ActiveDocument
For Each pg In doc.ActiveWindow.ActivePane.Pages
'最初の1行目の文字列
stName = pg.Rectangles(1).Lines(1).Range.Text
'ページ番号を取得
lNum = pg.Rectangles(1).Lines(1).Range.Information(wdActiveEndAdjustedPageNumber)
'文末の改行コードはトル
If Right(stName, 1) = vbCr Or Right(stName, 1) = vbLf Or Right(stName, 1) = vbCrLf Then stName = Left(stName, Len(stName) - 1)
'PDF保存用パス
stName = doc.Path & "\" & stName & ".pdf"
'ページを指定してPDF化
doc.ExportAsFixedFormat OutputFileName:=stName, _
Range:=wdExportFromTo, From:=lNum, To:=lNum, _
ExportFormat:=wdExportFormatPDF
Next pg
Set doc = Nothing
End Sub
解説
Word文書をPDFにするには、ExportAsFixedFormatというメソッドを使うことが多いです。このメソッドはExcelVBAでも使いますが、WordとExcelでは微妙に名前付引数の名称が異なるので注意です。
Document.ExportAsFixedFormat メソッド (Word)
ExportAsFixedFormatにはページを指定して出力するオプションも用意されていますので、今回はそれを使いました。
問題は、各ページの1行目を取得する方法です。
今回、PageオブジェクトのRectangleオブジェクトの中のLineオブジェクトを参照する形にしましたが、例えばページをまたぐようなRectangleが存在する場合、うまくいかないでしょう。
またファイル名となる1行目の文字列も、仕様が分からないのでそのままとってくる(Range.Text)形としましたが、例えばファイル名として不適切な文字列(/*などの記号)が含まれている場合もうまくいかないでしょう。
ページ番号はInformationを使って、wdActiveEndAdjustedPageNumberを指定してとってくるようにしてあります。
蛇足ですが、今回のようにPagesからアプローチする方法とは別に、BookMarks(“\Page”)からアプローチする方法もあります。
Pagesの場合はActiveWindowから参照していきます。BookMarks(“\Page”)の場合はActiveDocumentから参照していきます。
後記
WordのVBAは癖が強いですね。オブジェクトの参照も直感的に分かるようなものではないので(特にBookmark(“\Page”)は知らなければ分かりようがない)慣れが必要です。
1000ページ以上ということですので、これで少しでも作業が楽になるとよいのですが。
20230124追記 質問者様は無事コードを自分のものとされ、作業が楽になったようです。よかった!
-
前の記事
電子取引にかかるファイル 2023.01.19
-
次の記事
VBSでCtrl+Alt+Deleteするには【未解決】 2023.01.21