自作ツール「かんたん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化して、ドキュメントを保存せずに閉じたらいいじゃねーかよ!!!!!!!!
はっ、取り乱しました。
まあ、とりあえず動くこと優先で書き飛ばしたコードなのでムダが多いコードだとは自分でも思いますよ。まあ、ヒマなときにリファクタリングするので、そのときはまたネタにしようかな。
ヒマな人はリファクタリングの練習用にどうぞ。