エクセルで、マクロでプリンタを指定して印刷させる方法について相談を受けまして。 あんまりマクロで印刷かけたりは自分ではやらないのでよく分からんのですが。 標準のプリンタで印刷をするのは簡単にできるのですが、複数のプリンタがある環境で、プリンタを指定して印刷したいと。 ああ、遠い昔にやった気がするなぁ・・・(^^;) VBAあるあるだった話な記憶が。 でも覚えてないので勉強しなおし、おさらい覚書メモメモ。。。φ(._. )
まず、マクロで印刷させる書き方から…
現在アクティブなシートをプリントアウトするには
Sub sample1()
ActiveWindow.SelectedSheets.PrintOut
End Sub
一番目のシートをプリントアウトするには
Sub sample2()
Worksheets(1).PrintOut
End Sub
プリンターを指定して一番目のシートをプリントアウトするには
Sub sample3()
Application.ActivePrinter = "プリンター名 on Ne01:"
Worksheets(1).PrintOut
End Sub
Sub sample2()
Worksheets(1).PrintOut
End Sub
プリンターを指定して一番目のシートをプリントアウトするには
Sub sample3()
Application.ActivePrinter = "プリンター名 on Ne01:"
Worksheets(1).PrintOut
End Sub
※この時のポート(上記赤字部分)が分からなくて躓くのがあるあるですね
プリンター名とポート名を知るには
レジストリエディターで
HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices
を見るとプリンター名とポート番号が分かる。 プリンター切り替えを、PrintOutメソッドの因数に直接指定しても可
Sub sample4()
ActiveWindow.SelectedSheets.PrintOut ActivePrinter: = "プリンター名"
End Sub
※この場合はポート名の入力が不要になるので、こちらのほうが便利ですね さらに「¥¥NetBIOS名¥プリンタ名」や「IPアドレス」で指定しても行けました(環境によって結果は異なるかも?)
Sub sample5()
ActiveWindow.SelectedSheets.PrintOut ActivePrinter: = "¥¥http://192.168.0.3"
End Sub
ちなみに、現在アクティブなプリンターのポート番号は以下のマクロでメッセージボックスに表示させられますが
Sub sample6()
MsgBox Application.ActivePrinter
End Sub
複数のプリンタがある環境では、「通常使用するプリンタ」しか表示されないので、レジストリを参照したほうが早いですね。 (※レジストリに変更を加えてしまうと、Windowsが正常に動かなくなる場合がありますので、取扱は慎重に、自己責任でお願いします。)
コメント