【VBA】PCにインストールされているプリンターの一覧を取得する方法

目次

はじめに

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 を設定する前に、利用可能なプリンター名を確認したり、特定のプリンターの存在をチェックしたりと、より高度で安定した印刷マクロを作成することができます。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次