VBAで自動化 VBA一覧 ファイル・印刷操作 印刷設定

【VBA】印刷時にプリンターを指定する方法と応用テクニック

Excel VBAを使うと、印刷時に特定のプリンターを指定して出力することが可能です。
特に、複数のプリンターを使いたい場合や、ネットワークプリンターを選択したい場合に便利です。

この記事では、VBAを使ってプリンターを指定しながら印刷する方法や、便利なカスタマイズ方法を解説します。

デフォルトのプリンターを取得する

VBAでは、現在の既定のプリンター名を取得できます。

✅デフォルトのプリンターを取得

Sub GetActivePrinter()

Debug.Print "現在のプリンター: " & Application.ActivePrinter

End Sub

📌Debug.Printを使って、最新のプリンター名を即確認!
📌プリンター名を調べて、VBAで指定する際の参考に!

【VBA】デバック(Debug Print)で変数の中身の確認する方法

プリンターを指定して印刷

VBA でプリンターを指定するには、まずApplication.ActivePrinterでプリンター名を設定してからPrintOutを実行します。

✅ プリンターを指定して印刷

Sub PrintWithSpecificPrinter()

Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)

Application.ActivePrinter = printerName
ActiveSheet.PrintOut

End Sub

📌プリンター名はApplication.ActivePrinterで事前に確認!
📌Ne02:の部分は環境によって異なるため、GetActivePrinterで確認!

ユーザーにプリンターを選択させる

固定のプリンターを指定するのではなく、ユーザーがプリンターを選択できるようにすることも可能です。

InputBoxを使ってユーザーにプリンターを指定させる

Sub PrintWithUserSelectedPrinter()

Dim selectedPrinter As String
selectedPrinter = InputBox("使用するプリンター名を入力してください:", "プリンター選択")

If selectedPrinter <> "" Then

Application.ActivePrinter = selectedPrinter
ActiveSheet.PrintOut

Else

MsgBox "プリンターが指定されていません。", vbExclamation

End If

End Sub

📌ユーザーがプリンター名を入力し、指定したプリンターで印刷します!
📌間違ったプリンター名を入力するとエラーになるので注意してください!

【VBA】InputBoxの活用方法

プリンターの一覧を取得する

PCにインストールされているプリンターの一覧を取得したい場合は、WMIを使用します。

✅ プリンターの一覧を取得して表示

Sub GetPrinterList()

Dim objWMI As Object, objPrinter As Object
Dim printers As String
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * From Win32_Printer")

printers = "インストール済みのプリンター一覧:" & vbCrLf
For Each objPrinter In objWMI

printers = printers & objPrinter.Name & vbCrLf

Next objPrinter

MsgBox printers, vbInformation, "プリンター一覧"

End Sub

📌インストールされているプリンターの一覧をメッセージボックスで表示!
📌取得したプリンター名をActivePrinter設定すれば、任意のプリンターを指定可能!

特定のプリンターが利用可能か確認

ユーザーが指定したプリンターが本当に利用できるかどうかチェックする方法もあります。

✅ 指定したプリンターが存在するか確認

Function IsPrinterAvailable(printerName As String) As Boolean

Dim objWMI As Object, objPrinter As Object
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * From Win32_Printer")

For Each objPrinter In objWMI

If objPrinter.Name = printerName Then

IsPrinterAvailable = True
Exit Function

End If

Next objPrinter

IsPrinterAvailable = False

End Function

Sub PrintIfPrinterExists()

Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)

If IsPrinterAvailable(printerName) Then

Application.ActivePrinter = printerName
ActiveSheet.PrintOut

Else

MsgBox "指定したプリンターは見つかりません。", vbExclamation

End If

End Sub

📌プリンターが存在するかチェックしてから印刷!
📌利用不可のプリンターを設定してしまうのを防止!

両面印刷を指定

プリンターが両面印刷(両面)に対応している場合、VBAで指定できます。

✅ 両面印刷を設定して印刷

Sub PrintWithDuplex()

Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)

Application.ActivePrinter = printerName
Sheets.PrintOut Copies:=1, Collate:=True, Duplex:=True

End Sub

📌プリンターが両面印刷に対応している必要あります!

用紙サイズや印刷設定を適用する

印刷時に用紙サイズやレイアウトを調整することも可能です。

✅ A4用紙・横向き・1ページにて行って印刷

Sub PrintWithSettings()

Dim printerName As String
printerName = "Canon iR-ADV C3520 on Ne02:" ' プリンター名を指定(例)

Application.ActivePrinter = printerName

With ActiveSheet.PageSetup

.PaperSize = xlPaperA4 ' A4 に設定
.Orientation = xlLandscape ' 横向き
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = 1

End With

ActiveSheet.PrintOut

End Sub

📌用紙サイズ・向き・縮小設定を適用して印刷!
📌データも 1 大きなページにわかる!


まとめ

機能VBAコード
現在のプリンターを取得Debug.Print Application.ActivePrinter
プリンターを指定して印刷Application.ActivePrinter = "プリンター名"
ユーザーにプリンターを選ばれるInputBox見る
プリンターの一覧を取得Win32_Printerを WMI で取得
プリンターの存在を確認IsPrinterAvailable見る
両面印刷Duplex:=True
A4 / 横向き / 1ページに燃える.PaperSize = xlPaperA4, .Orientation = xlLandscape
おすすめの活用方法

VBA でプリンターを指定すれば、印刷ミスを防ぐ!
プリンターの一覧を取得し、動的に設定すると便利!
PrintPreviewを活用すれば、意図的に印刷を防止できる!

    -VBAで自動化, VBA一覧, ファイル・印刷操作, 印刷設定