VBAで印刷処理を自動化する際、社内に複数のプリンターがあったり、PDFとして出力したりと、状況に応じて出力先を切り替えたい場合があります。
VBAを使えば、「マクロ実行時にユーザーがプリンターを選べるようにする」ことや、「特定のプリンターに固定して自動で印刷する」ことの両方が可能です。この記事では、目的別に2つのプリンター選択・切り替え方法を解説します。
方法1:ダイアログボックスを表示してユーザーに選択させる
この方法は、マクロの実行者が状況に応じて出力先プリンターを選べるようにしたい場合に最適です。Excelに組み込まれている「プリンターの設定」ダイアログボックスを呼び出します。
コードと解説
Sub SelectPrinterViaDialog()
' 「プリンターの設定」ダイアログボックスを表示します
Application.Dialogs(xlDialogPrinterSetup).Show
' ダイアログで選択された(現在アクティブな)プリンター名を表示します
If Application.ActivePrinter <> "" Then
MsgBox "現在選択されているプリンター: " & vbCrLf & Application.ActivePrinter
Else
MsgBox "プリンターが選択されませんでした。"
End If
End Sub
Application.Dialogs(xlDialogPrinterSetup).Show
という一行が、この処理のすべてです。
Application.Dialogs(...)
: Excelの様々な組み込みダイアログボックスを呼び出すための機能です。xlDialogPrinterSetup
: その中でも「プリンターの設定」ダイアログを指定するための決まった名前(定数)です。.Show
: このメソッドで、ダイアログボックスが画面に表示されます。
ユーザーがダイアログでプリンターを選択して「OK」を押すと、そのプリンターがアクティブな状態になります。その名前をApplication.ActivePrinter
プロパティで取得できます。
方法2:コードで直接プリンターを指定する
この方法は、請求書は必ずAのプリンター、報告書は必ずBのプリンター、というように、出力先が常に決まっている完全に自動化された処理に適しています。
【重要】プリンターの正確な名前を確認する方法
この方法を試す前に、お使いのPCに登録されているプリンターの**「正確な名前」**を知る必要があります。
- Windowsの
設定
を開きます。 Bluetoothとデバイス
>プリンターとスキャナー
をクリックします。- 表示されたプリンターの一覧から、使いたいプリンターの名前を一字一句間違えずに確認・コピーします。(例:
Microsoft Print to PDF
)
コードと解説
Sub SetSpecificPrinter()
' 変数を宣言します
Dim targetPrinterName As String
' ここに、事前に確認した正確なプリンター名を設定します
' 例として「Microsoft Print to PDF」を指定
targetPrinterName = "Microsoft Print to PDF"
On Error Resume Next ' プリンターが存在しない場合のエラーを回避
' アクティブなプリンターを設定
Application.ActivePrinter = targetPrinterName
On Error GoTo 0 ' エラー処理を元に戻す
' 設定が正しく変更されたかを確認
If Application.ActivePrinter = targetPrinterName Then
MsgBox "プリンターが「" & targetPrinterName & "」に設定されました。"
Else
MsgBox "指定されたプリンター「" & targetPrinterName & "」が見つからないか、設定できませんでした。"
End If
End Sub
Application.ActivePrinter = "プリンター名"
という形で、ActivePrinter
プロパティにプリンター名を設定することで、アクティブなプリンターを直接切り替えることができます。
この方法は、ユーザーの手を介さずに処理を進められる反面、指定した名前のプリンターが存在しないPCで実行するとエラーになるため、注意が必要です。
まとめ
VBAでのプリンター選択には、目的別に2つのアプローチがあります。
- ユーザーに選択の自由を与えたい場合: 柔軟性が高い
Application.Dialogs(xlDialogPrinterSetup).Show
が適しています。 - 処理を完全に自動化し、出力先を固定したい場合:
Application.ActivePrinter = "プリンター名"
で直接指定する方法が有効です。
どちらの方法も、その後に.PrintOut
や.PrintPreview
といった印刷命令を続けることで、目的のプリンターへの出力を実現します。マクロの用途に応じて、最適な方法を選択してください。