Wordドキュメントの編集中のページをサクッとPDF化する
WordドキュメントのアクティブなページのみPDF化
以前、
コチラの記事で、クリック一発で編集中のドキュメントをPDF化するマクロを紹介した。
今回は、題名のとおり、
現在アクティブなページのみPDF化
するマクロを考える。
使い道があるかどうかは不明なれどw
DocumentオブジェクトのExportAsFixedFormatメソッド
「PDF化」といえば、DocumentオブジェクトのExportAsFixedFormatメソッドの出番。
このメソッド、
実は、ご覧のように異様にたくさんの引数を持っている。その数実に 15。まさに引数祭りw
たいていは必須の「OutPutFileName」と「ExportFormat」の2つしか指定しないので、
Document.ExportAsFixedFormat "hogehoge.pdf",wdExportFormatPDF
みたいに記述すると思う。
実は、このメソッドの引数の中には、
Range
という引数がある。
面白いのは、この引数、データ型が
WdExportRange型 という独自の型なんである。
ちょっと調べてみると、WdExportRangeというのは列挙体で、
名前 | 値 | 説明 |
---|---|---|
wdExportAllDocument | 0 | 文書全体 |
wdExportCurrentPage | 1 | 現在のページ |
wdExportFromTo | 2 | 開始・終了ページを指定 |
wdExportSelection | 3 | 現在の選択範囲 |
それぞれ実際の値と意味するところはこうなっている。
つまり、ExportAsFixedFormatメソッドの引数「Range」に「wdExportCurrentPage(正体は整数の"2")」を渡してやれば、現在のページのみPDF化できるということだ。
ちなみに、コーディングの際は、
こんなふうにインテリセンスが働くので、楽ちん。
ところで、列挙体だけど
WdExportRange.wdExportAllDocument
みたいに書かなくても良いのはなぜなんでしょうね?(←素人丸出しの疑問?)
ファイル名にページ番号を付加する
現在選択中のページのみをPDF化するのだから、できあがったPDFファイルのファイル名にページ番号を付加するぐらいの気は利かせたいところ。
となると、現在選択中のページのページ番号を取得しなければならない。
SelectionオブジェクトのInformationプロパティ
結論から言うと、SelectionオブジェクトのInformationプロパティを参照すれば良い。
このInformationプロパティには引数が何と
41種類
もあった。
そのうち、「wdActiveEndPageNumber」を渡すと、Informationプロパティは、現在カーソルのあるページのページ番号を返してくれる。
Selection.Information(wdActiveEndPageNumber)
こう書く。
ちなみに、「Selection.Information(」まで入力すると、
このようにインテリセンスが働くので、入力は簡単。
コーディング
以上のことを踏まえてコーディングしてみる。
リスト1 標準モジュール
Public Sub convertActivePageToPDF() '///アクティブドキュメントをPDF化する。' Dim objDoc As Document Set objDoc = ActiveDocument Dim pathStr As String pathStr = objDoc.FullName Dim pageNum As Integer pageNum = Selection.Information(wdActiveEndPageNumber) '……(1)' 'フルパスから拡張子の「.」の位置を取得。' Dim n As Integer n = InStrRev(pathStr, ".") '「.」の位置を元に、PDFファイルのフルパスを作る。' 'ページ番号3ケタゼロ埋め文字列をファイル名に付加する。' pathStr = Left(pathStr, n - 1) & _ "_P." & Format(pageNum, "00#") & ".pdf" '……(2)' With objDoc .ExportAsFixedFormat OutputFileName:=pathStr, _ ExportFormat:=wdExportFormatPDF, _ Range:=wdExportCurrentPage '……(3)' End With Set objDoc = Nothing End Sub
(1)の
pageNum = Selection.Information(wdActiveEndPageNumber)
では、SelectionオブジェクトのInformationプロパティに引数として「wdActiveEndPageNumber」を渡すことによって、現在カーソルのあるページの番号を取得し、変数pageNumに格納している。
(2)の
pathStr = Left(pathStr, n - 1) & _ "_P." & Format(pageNum, "00#") & ".pdf"
について。
この行にたどり着いた段階で、変数 pathStr には編集中のドキュメントのフルパスが格納されており、変数 n には拡張子の「.」(ピリオド)の位置(前から何番目にあるか)が格納されている。
まず
Left(pathStr, n - 1)
で、Left関数を用いて、フルパスのうち、拡張子の「.」(ピリオド)の左側の文字列を取得する。
次に
& "_P."
で文字列「_P.」を連結し、
さらに
Format(pageNum, "00#")
でFormat関数を用いてページ番号を3ケタ0埋めにした文字列を連結し、最後に「.pdf」を連結して、出力PDFファイルのファイルフルパスを作成している。1000ページを超すようなドキュメントを扱うことはまあないので3ケタにしているが、4ケタとか5ケタとか必要だったら、Format関数の第2引数を変えたら良いと思う。
(3)の
objDoc.ExportAsFixedFormat OutputFileName:=pathStr, _ ExportFormat:=wdExportFormatPDF, _ Range:=wdExportCurrentPage
で、ExportAsFixedFormatメソッドを実行する。引数「Range」に「wdExportCurrentPage」を指定しているので、現在カーソルのあるページだけがPDF化されることになる。
実行
実験用として、
こんなドキュメントを用意して、3ページ目にカーソルを置いて実行。
実に分かりにくいけど、3ページ目だけがPDF化された。
おわりに
現在のページのみPDF化する、という場面がそんなにあるかどうかは不明だけれど、そういう作業が頻繁に発生するようなら、アドインとして登録しておいたら便利だと思う。
アドイン登録の方法については、
コチラをどうぞ。
Word初心者なので、なかなかオブジェクト構造が飲み込みづらいけれど、分かってくると結構いじり甲斐がありそうな気もするなあ。