パソコン教室くりっくのお客さんから

Excel 2010 になったら VBA でプリンターの切り替えができなくなったので来てほしい

との電話があり、お手伝いしてきました。

Excel 2007 まではプリンターを切り替える操作をマクロで記録すると以下の VBA プログラムが作成されたので楽だったんです。

Application.ActivePrinter = “NEC MultiWriter 5750C on Ne00:”

しかし、Excel 2010 になったら印刷画面が変わったために上記と同じようにマクロを記録しても VBA プログラムが記録されなくなってしまい、上記の1行のプログラムを手入力しなければいけません。

その際、プリンター名を調べるのは簡単なのですが、on に続くポート名が分かりづらいんです。

プリンターのプロパティを表示するとポートが USB001 とかIPアドレスになっているのですが、VBA では ne00 のような表記で指定しないとエラーになってしまいます。

VBA で指定するポート名を探す方法を調べてみたところ、レジストリエディターで

HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Devices

を開くと以下のような画面が表示されてポート名が分かりました。

Excel VBA で指定するポート名をレジストリエディターで探す

Excel VBA でアクティブプリンターを切り替えるためには上記のようにしないといけませんが、代替案として以下のようにする方法もあります。

ActiveSheet.PrintOut ActivePrinter:=”NEC MultiWriter 5750C”

上記のように PrintOut メソッドでプリンターを指定する場合はポート名の指定が不要ですので、用途によって使い分けるようにすればいいですね。