WordドキュメントのPDF化ツール――だいぶ本格的になりました
自作ツール「かんたんPDF変換」
3種類のPDF変換をこなすツールを自作した
上記の記事で、Wordドキュメントを編集中にサクッとPDF化するマクロを作ったわけだが、
いっそちゃんとしたツールとして作ってしまおう
と思って、作ってみた。
実行するとこんなユーザーフォームが出てきて、
- ドキュメント全体
- 現在カーソルがあるページのみ
- 指定したページ範囲
のどれかを選んで実行すると、指定の形でPDFファイルをサクッと吐き出すというもの。
作り方
まず、ユーザーフォームを挿入し、画像のように各コントロールを貼り付ける。
めんどくさいので、フォーム、各コントロールのサイズや位置に関するプロパティは目分量w
フォーム及び各コントロールのオブジェクト名は画像の通り。
いちおう一覧表にもしておこう。
フォーム・各コントロールのオブジェクト名
フォーム・コントロール | オブジェクト名 |
---|---|
ユーザーフォーム | FrmMain |
フレーム | FrameMain |
オプションボタン | OptBtnWhole |
オプションボタン | OptBtnCurrent |
オプションボタン | OptBtnSelect |
コマンドボタン | BtnStart |
コマンドボタン | BtnCancel |
テキストボックス | TxtBoxFrom |
スピンボタン | SpinBtn1 |
ラベル | Label1 |
テキストボックス | TxtBoxTo |
スピンボタン | SpinBtn1 |
これだけ準備しておいて、お次はコーディング。
リスト1 フォームモジュール
だいぶ長くなるよ。
Option Explicit Private currentPage As Integer Private numOfPagesInDocument As Integer Private Sub UserForm_Initialize() currentPage = Selection.Information(wdActiveEndPageNumber) numOfPagesInDocument = Selection.Information(wdNumberOfPagesInDocument) With Me .OptBtnWhole = True Call unablePageSelect End With End Sub Private Sub unablePageSelect() With Me .SpinBtn1.Enabled = False .SpinBtn2.Enabled = False .TxtBoxFrom.Enabled = False .TxtBoxTo.Enabled = False End With End Sub Private Sub BtnCancel_Click() Unload Me End Sub Private Sub BtnStart_Click() With Me If .OptBtnWhole.Value _ Then Call convertDocumentToPDF If .OptBtnCurrent.Value _ Then Call convertActivePageToPDF(currentPage) If .OptBtnSelect.Value _ Then Call convertSelectedPagesToPDF(.TxtBoxFrom.Value, _ .TxtBoxTo.Value) End With Unload Me End Sub Private Sub OptBtnWhole_Change() If OptBtnWhole.Value Then Call unablePageSelect If OptBtnCurrent.Value Then Call unablePageSelect End Sub Private Sub OptBtnCurrent_Change() If OptBtnWhole.Value Then Call unablePageSelect If OptBtnCurrent.Value Then Call unablePageSelect End Sub Private Sub OptBtnSelect_Change() If OptBtnWhole.Value Then Call unablePageSelect If OptBtnCurrent.Value Then Call unablePageSelect If OptBtnSelect.Value Then Call enablePageSelect End Sub Private Sub enablePageSelect() With Me .SpinBtn1.Enabled = True .SpinBtn2.Enabled = True .TxtBoxFrom.Enabled = True .TxtBoxFrom.Value = currentPage .TxtBoxTo.Enabled = True .TxtBoxTo.Value = numOfPagesInDocument End With End Sub Private Sub SpinBtn1_SpinDown() With Me.TxtBoxFrom If CInt(.Value) > 1 Then .Value = .Value - 1 End If End With End Sub Private Sub SpinBtn1_SpinUp() With Me.TxtBoxFrom If CInt(.Value) < CInt(Me.TxtBoxTo.Value) Then .Value = .Value + 1 End If End With End Sub Private Sub SpinBtn2_SpinDown() With Me.TxtBoxTo If CInt(.Value) > CInt(Me.TxtBoxFrom.Value) Then .Value = .Value - 1 End If End With End Sub Private Sub SpinBtn2_SpinUp() With Me.TxtBoxTo If CInt(.Value) < CInt(Selection.Information(wdNumberOfPagesInDocument)) Then .Value = .Value + 1 End If End With End Sub Private Sub convertDocumentToPDF() '///アクティブドキュメントをPDF化する。' Dim objDoc As Document Set objDoc = ActiveDocument Dim pathStr As String pathStr = objDoc.FullName 'フルパスから拡張子の「.」の位置を取得。' Dim n As Integer n = InStrRev(pathStr, ".") '「.」の位置を元に、PDFファイルのフルパスを作る。' pathStr = Left(pathStr, n) & "pdf" With objDoc .ExportAsFixedFormat OutputFileName:=pathStr, _ ExportFormat:=wdExportFormatPDF End With Set objDoc = Nothing End Sub Private Sub convertActivePageToPDF(ByVal pageNum As Integer) '///アクティブページだけをPDF化する。' Dim objDoc As Document Set objDoc = ActiveDocument Dim pathStr As String pathStr = objDoc.FullName 'フルパスから拡張子の「.」の位置を取得。' Dim n As Integer n = InStrRev(pathStr, ".") '「.」の位置を元に、PDFファイルのフルパスを作る。' 'ページ番号3ケタゼロ埋め文字列をファイル名に付加する。' pathStr = Left(pathStr, n - 1) & _ "_P." & Format(pageNum, "00#") & ".pdf" With objDoc .ExportAsFixedFormat OutputFileName:=pathStr, _ ExportFormat:=wdExportFormatPDF, _ Range:=wdExportCurrentPage End With Set objDoc = Nothing End Sub Private Sub convertSelectedPagesToPDF(ByVal pageFrom As Integer, _ ByVal pageTo As Integer) '///指定されたページ範囲をPDF化する。' Dim objDoc As Document Set objDoc = ActiveDocument Dim pathStr As String pathStr = objDoc.FullName 'フルパスから拡張子の「.」の位置を取得。' Dim n As Integer n = InStrRev(pathStr, ".") '「.」の位置を元に、PDFファイルのフルパスを作る。' 'ページ番号3ケタゼロ埋め文字列をファイル名に付加する。' pathStr = Left(pathStr, n - 1) & _ "_P." & Format(pageFrom, "00#") & _ "-P." & Format(pageTo, "00#") & ".pdf" With objDoc .ExportAsFixedFormat OutputFileName:=pathStr, _ ExportFormat:=wdExportFormatPDF, _ Range:=wdExportFromTo, _ From:=pageFrom, _ To:=pageTo End With Set objDoc = Nothing End Sub
実行
エントリーポイントとして、標準モジュールに次のコードを書く。
リスト2 標準モジュール
Public Sub run() FrmMain.Show End Sub
このマクロを書いたファイルを「.dotm」形式で
ユーザー\AppData\Roaming\Microsoft\Word\STARTUP フォルダ
に保存、クイック アクセス ツール バー に登録して実行するようにする。
一連の方法は
コチラをどうぞ。
こんなドキュメントがあったとして、
こんなふうに条件を指定して[PDF化]ボタンをクリックすると、
一瞬でPDF化できた。
おわりに
なかなか便利なツールに仕上がったんではないでしょうか。
え? 「飛び飛びのページを指定してPDF化したいときはどうするんだよ!?」ですか?
そんなもん、不要なページを削除してからPDF化して、ドキュメントを保存せずに閉じたらいいじゃねーかよ!!!!!!!!
はっ、取り乱しました。
まあ、とりあえず動くこと優先で書き飛ばしたコードなのでムダが多いコードだとは自分でも思いますよ。まあ、ヒマなときにリファクタリングするので、そのときはまたネタにしようかな。
ヒマな人はリファクタリングの練習用にどうぞ。