Sample Site

プリンタ情報の取得/設定

実用的な面ではプリンター関係の処理、設定は業務を日々処理する事を前提とするとかなり重要な事になってきます。 ここでは、様々なプリンター関係の処理のうちで基本的なプリンター名の取得やその各々のデバイスに設定されている ポート番号を取得するTIPS的なものを考えます。また、これも基本的な印刷時の様々な情報をプリンタ側に設定する 基本的なTIPSを紹介します。

●vbaでプリンターの情報を取得するには名前程度ならばvbaのみで可能ですが、ポート番号等はレジストリの情報の取得が必要となってきます。ここではwindowsAPI(Application Programming Interface)を用いて実現させています。 windowsAPIの導入は定型的なコードがありますのでそれを利用します。

(windowsAPIの様々な種類)

(旧)
https://docs.microsoft.com/ja-jp/previous-versions/msdn10/Hh240557(v=MSDN.10)

https://docs.microsoft.com/ja-jp/windows/win32/apiindex/windows-api-list?redirectedfrom=MSDN


レジストリ情報の例

(上記のレジストリ情報の場所:プリンター名とポート番号)
コンピューター\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Devices


●vbaでのプリンター名の一覧取得

単純に、今使っているプリンター名とポート番号は
MsgBox Application.ActivePrinter
と言うコードで簡単に取得出来ます。

(表示例) PX-505F Series(ネットワーク) on Ne00:


(参考)
https://docs.microsoft.com/ja-jp/office/vba/api/excel.application.activeprinter

[プリンター一覧情報(名前、ポート番号)の重要性]
現在のプリンターは上記の様に比較的簡単に、名前とポート番号(Ne**の形式)は取得できますが、印刷の自動化等の処理を行う場合 自動的に使用するプリンターを設定変更したりする必要があります。
そのような場合にプリンターの一覧情報の取得が必要になってくるわけです。
とりあえず名前の一覧の取得には以下の方法が主なものとして上げられます。

1)Namespace(4)の利用

Shell.Applicationというクラスのオブジェクトの[Shellオブジェクト].NameSpace(4).Itemsコレクション のプロパティ(name)を取り出す操作で、各プリンター名を取得します。

オブジェクトブラウザで見るNamespace(4)の利用の参考情報

2)ExecQueryメソッドの利用

ExecQueryの書式
Set Services = GetObject("winmgmts:").ExecQuery("Select * from Win32_Service Where Name='サービス名'")

3)Accessモジュールの利用

Application.Printersコレクションの
.DeviceNameプロパティ
.DriverNameプロパティ
.Portプロパティ
で取得出来ます。(excelのvbaとは異なります)

上の3種類の方法の具体的なコードは、下のプリンターの名前の一覧表示に示すので参考にしてください。 サンプルファイルもダウンロード出来ます。

その他の様々なプリンター情報の取得方法(参考情報)
■■■PowerShell■■■
https://docs.microsoft.com/ja-jp/powershell/scripting/samples/working-with-printers?view=powershell-7.2


■■■コマンドでよければ■■■
C:\Windows\System32\cmd.exe
「wmic printer get name」で名前の一覧が取得出来ます。



一方、ポート番号(Ne**形式)の取得は、vbaでは出来ないので、windowsAPIを使用します。
その方法具体的については下記にある
プリンターのポート番号の取得のための関数(windowsAPIの利用)を参照してください。



プリンターの名前の一覧表示
設定画面
プリンター名の一覧取得の代表的な3つの方法を以下に示します。

プリンター名の一覧取得その1(Namespace(4)の利用)


プリンター名の一覧取得その2(ExecQueryメソッドの利用)


プリンター_プリンター名一覧取得1~2(ダウンロード)

プリンター名の一覧取得その3(Accessモジュールの利用)

※このコードの実行にはAccessモジュール(ライブラリーファイル)を導入する必要があります
VBEの画面で、「ツール」->「参照設定」
Microsoft Access *** Object Libraryにチェック[OK]ボタンを押す

プリンター_プリンター名一覧取得3(ダウンロード)

プリンターのポート番号の取得のための関数(windowsAPIの利用)
ここでは、windowsAPIを使って、レジストリにあるプリンターのポート番号を取得する方法を紹介します。 vbaだけではレジストリの情報は取得出来ませんのでまず、そのための関数を設定します。

windowsAPIのための宣言


GetRegValue関数の設定


以上の、宣言、設定によって「GetRegValue」関数が使えるようになり、これを用いて プリンターのポート番号を取得します。

プリンターのポート番号の取得(windowsAPIの利用)
設定画面

上記の「GetRegValue」関数を用いて、プリンター名の取得と同時にそのポート番号も取得します。

プリンター_名前一覧/ポート番号取得(ダウンロード)

プリンターの印刷パラメータの設定
設定画面

実際にプリンターで印刷するときの、印刷パラメータを設定します。印刷パラメータの設定ダイアログは 「Application.Dialogs(xlDialogPrint).Show」のコード記述で出来ます。

プリンター_パラメータ設定(ダウンロード)

プリンター情報取得/設定(まとめ)


プリンター情報取得/設定(まとめ)です。
プリンターの名前とポート番号の一覧取得。プリンター印刷時の様々なパラメータを設定します。



Sample Site