はじめに
VBAで印刷関連のマクロを作成する際、「現在利用可能なプリンターの名前をリストアップしたい」「特定のプリンターがインストールされているか確認したい」といった場面があります。
VBAからWindowsのシェル機能にアクセスすることで、PCに登録されているプリンターの一覧を簡単に取得することが可能です。この記事では、Shell.Application
オブジェクトを使って、インストール済みの全プリンターの名前を取得し、イミディエイトウィンドウに出力するマクロをご紹介します。
インストール済みプリンターの一覧を取得するVBAサンプルコード
このマクロは、Windowsのシステムフォルダの一つである「プリンター」フォルダにアクセスし、その中に含まれる全ての項目(プリンター)の名前を一つずつ取り出します。
完成コード
' PCにインストールされている全てのプリンター名を取得する
Sub ListInstalledPrinters()
'== 変数を定義します ==
Dim shellApp As Object
Dim printerFolderItems As Object
Dim printerItem As Object
'--- Shell.Applicationオブジェクトを作成 ---
Set shellApp = CreateObject("Shell.Application")
'--- 「プリンター」フォルダのオブジェクトを取得 ---
' &H4 は「プリンター」フォルダを指す特別な定数
Set printerFolderItems = shellApp.Namespace(&H4).Items
'--- イミディエイトウィンドウに出力 ---
Debug.Print "--- インストール済みプリンター一覧 ---"
For Each printerItem In printerFolderItems
Debug.Print printerItem.Name
Next printerItem
'--- オブジェクトを解放 ---
Set shellApp = Nothing
MsgBox "プリンターの一覧をイミディエイトウィンドウに出力しました。"
End Sub
コードの解説
Set shellApp = CreateObject("Shell.Application")
CreateObject
関数を使って、Windowsのシェル(エクスプローラーなどのUI機能)をVBAから操作するための Shell.Application
オブジェクトを生成しています。
shellApp.Namespace(&H4).Items
この一行が、プリンターフォルダにアクセスするための核心部分です。
.Namespace(...)
: Windowsの特殊なフォルダ(デスクトップ、ごみ箱、コントロールパネルなど)にアクセスするためのメソッドです。&H4
: 引数として渡している&H4
は、16進数の4
を意味し、これは**「プリンター」フォルダ**を指すための特別な定数値です。.Items
: 取得したフォルダオブジェクトの中に含まれる、全ての項目のコレクションを返します。
For Each printerItem In printerFolderItems
取得した printerFolderItems
コレクションを For Each
ループで一つずつ処理しています。各 printerItem
が、個々のプリンターを表すオブジェクトになります。
Debug.Print printerItem.Name
printerItem
オブジェクトの .Name
プロパティに、プリンター名(例: “Microsoft Print to PDF”)が格納されているため、これをイミディエイトウィンドウに出力しています。
まとめ
今回は、VBAからWindowsのシェル機能を利用して、インストールされているプリンターの一覧を取得する方法を解説しました。
CreateObject("Shell.Application")
でシェルオブジェクトを生成する。.Namespace(&H4)
で「プリンター」フォルダにアクセスする。- フォルダ内の
.Items
をループ処理し、各アイテムの.Name
を取得する。
この方法を使えば、Application.ActivePrinter
を設定する前に、利用可能なプリンター名を確認したり、特定のプリンターの存在をチェックしたりと、より高度で安定した印刷マクロを作成することができます。