こんにちは。Excel VBA講師の私ですが、今日は少し趣向を変えて、Word VBAにおける「印刷プレビュー」の自動化についてお話ししましょう。
Wordで文書を作成し、いざ印刷しようとした際、思い通りのレイアウトにならずに「紙を無駄にした!」という経験は誰にでもありますよね。手作業で「ファイル」タブから「印刷」を選び、プレビューを確認する……。このルーチンワーク、実はVBAで一瞬にして実行できることをご存知でしょうか。
今日は、プロの現場で役立つWord VBAのプレビュー制御テクニックを、徹底的に深掘りしていきます。
なぜWordでプレビューをVBA化する必要があるのか
多くのビジネスパーソンは、Wordの印刷設定を「手動」で行っています。しかし、大量のドキュメントを扱う事務作業や、特定のフォーマットで定期的に出力を行う業務において、手動操作は「ヒューマンエラー」の温床です。
例えば、以下のようなケースです。
・特定のセクションだけを印刷したいが、ページ指定を間違えて全ページ印刷してしまう。
・プリンタの設定(カラー/モノクロ、両面/片面)を切り替えるのを忘れてしまう。
・そもそも、プレビュー画面を開くこと自体が面倒で、確認せずに印刷して失敗する。
VBAでプレビューを制御できれば、これらを「ボタン一つ」で解決できます。印刷前に必ずプレビューを表示させる仕組みを構築することで、ミスを未然に防ぐ「守りの自動化」が可能になるのです。
基本のキ:PrintPreviewメソッドの正体
Word VBAでプレビューを表示させるための最も基本的なコマンドは、`PrintPreview`メソッドです。
Sub ShowPrintPreview()
‘ 現在のドキュメントを印刷プレビューモードにする
ActiveDocument.PrintPreview
End Sub
非常にシンプルですね。しかし、これだけでは「プレビューを表示させるだけ」です。実務では、「プレビューを表示させ、ユーザーに確認を促し、OKなら印刷する」といったフローが必要です。
ここで重要なのは、`PrintPreview`メソッドを実行すると、Wordの画面が「印刷プレビューモード」に切り替わるという点です。このモードでは、通常の編集画面とはUIが異なるため、VBAの制御も少し工夫が必要になります。
プレビューモードを制御する高度なテクニック
プレビューモードに入った後、VBAでさらに細かい指示を出したい場合、`PrintPreview`プロパティを利用します。
Sub TogglePrintPreview()
‘ プレビューモードの切り替え
ActiveDocument.PrintPreview = Not ActiveDocument.PrintPreview
End Sub
このコードを使えば、現在の状態を判定して、プレビュー中なら通常表示に戻し、そうでないならプレビューを表示するというトグル動作が可能です。
さらに実践的なのは、プレビュー画面を閉じる動作です。プレビュー画面から元の編集画面に戻るには、以下のコマンドを使用します。
Sub ClosePreview()
‘ プレビューを閉じて編集画面に戻る
ActiveDocument.ClosePrintPreview
End Sub
実務で使える「確認&印刷」のテンプレートコード
それでは、現場で即戦力となる「プレビューを表示し、ユーザーに判断を仰ぎ、印刷を実行する」という一連の処理を作成してみましょう。
Sub SmartPrintProcess()
Dim answer As VbMsgBoxResult
‘ 1. プレビューを表示
ActiveDocument.PrintPreview
‘ 2. ユーザーに確認を求める
answer = MsgBox(“この内容で印刷してよろしいですか?” & vbCrLf & _
“「いいえ」を選択するとプレビューを閉じます。”, _
vbYesNo + vbQuestion, “印刷確認”)
‘ 3. 判断による分岐
If answer = vbYes Then
‘ 印刷を実行
ActiveDocument.PrintOut
‘ プレビューを閉じる
ActiveDocument.ClosePrintPreview
Else
‘ プレビューを閉じるだけ
ActiveDocument.ClosePrintPreview
MsgBox “印刷をキャンセルしました。”
End If
End Sub
このコードのポイントは、`MsgBox`を挟むことで、ユーザーが印刷ボタンを押す前に必ず「プレビューを確認する時間」を強制的に作っている点です。これにより、誤印刷を劇的に減らすことができます。
さらに一歩先へ:ページ指定印刷と組み合わせる
プレビューの真骨頂は、特定のページだけを確認したい場合です。`PrintOut`メソッドと組み合わせることで、指定したページだけをプレビューし、そのまま印刷する処理も可能です。
Sub PrintSpecificPagePreview()
‘ 3ページ目をプレビュー表示する設定(論理的な制御)
‘ 注意:PrintPreview自体はドキュメント全体を表示するのが基本仕様です
‘ 特定ページを印刷したい場合は以下のように記述します
Dim pRange As String
pRange = “3” ‘ 3ページ目のみ
‘ 印刷設定(プレビュー機能と組み合わせる)
ActiveDocument.PrintOut Range:=wdPrintRangeOfPages, Pages:=pRange
End Sub
VBAでプレビューを扱う際の注意点
ベテラン講師として一つアドバイスしておきたいのは、「プレビューの表示状態」と「プリンタドライバの相性」です。
Wordのプレビュー機能は、現在PCに設定されている「既定のプリンタ」のドライバに依存します。もし、プリンタドライバが古い場合や、ネットワークプリンタとの接続が不安定な場合、`PrintPreview`メソッドを実行した瞬間にWordがフリーズするリスクがゼロではありません。
そのため、本格的な業務ツールとして実装する場合は、`On Error Resume Next`を使用してエラーハンドリングを行うか、プリンタの設定が正しく取得できているかを確認するロジックを前段に組み込むことを推奨します。
まとめ:自動化は「安心」を買う行為である
今回紹介したプレビューの自動化は、単にキー操作を減らすためのものではありません。印刷という「物理的な出力」を伴う作業において、**「確認のプロセスをシステムに組み込む」**という非常に重要な考え方です。
Excel VBAで複雑な計算をするのも楽しいですが、Word VBAで文書作成の品質を維持する仕組みを作るのも、またプロフェッショナルなエンジニアの腕の見せ所です。
ぜひ、皆さんの業務環境でも、この「プレビュー確認自動化」を取り入れてみてください。たった数行のコードで、あなたの仕事の精度は確実にワンランクアップします。
それでは、また次回の講義でお会いしましょう。ハッピー・コーディング!
