【Excel VBA】印刷するプリンターを選択・切り替える2つの方法

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に登録されているプリンターの**「正確な名前」**を知る必要があります。

  1. Windowsの設定を開きます。
  2. Bluetoothとデバイス > プリンターとスキャナー をクリックします。
  3. 表示されたプリンターの一覧から、使いたいプリンターの名前を一字一句間違えずに確認・コピーします。(例: 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つのアプローチがあります。

  1. ユーザーに選択の自由を与えたい場合: 柔軟性が高いApplication.Dialogs(xlDialogPrinterSetup).Showが適しています。
  2. 処理を完全に自動化し、出力先を固定したい場合: Application.ActivePrinter = "プリンター名"で直接指定する方法が有効です。

どちらの方法も、その後に.PrintOut.PrintPreviewといった印刷命令を続けることで、目的のプリンターへの出力を実現します。マクロの用途に応じて、最適な方法を選択してください。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次