プリンターの情報を取得

プリンターの情報を取得する。

WMI(Windows Management Instrumentation)を利用してプリンターの情報を取得します。
VBAでWMIから情報を取得するにはSWbemLocatorオブジェクトのConnectServerメソッドを利用してコンピューター上の WMIへ接続することで取得できます。
プリンターの情報は接続したWMIの Win32_Printerクラス から取得します。

'*****************************************************************
' プリンターの情報取得
'*****************************************************************
Sub getPrinterInfo()

    'SWbemLocatorオブジェクトを作成してWMIに接続
    Dim oWMI As Object
    Set oWMI = CreateObject("WbemScripting.SWbemLocator").ConnectServer
    
    'オブジェクト取得のクエリを実行
    Dim oQrySet As Object
    Set oQrySet = oWMI.ExecQuery("SELECT * FROM Win32_Printer")
    
    'プリンタ情報の取得
    Dim oPrint As Object
    For Each oPrint In oQrySet
        Debug.Print "--------------------------------------------"
        Debug.Print "プリンタ名:" & oPrint.Name
        Debug.Print "共有プリンタ名:" & oPrint.ShareName
        Debug.Print "ドライバー名:" & oPrint.DriverName
        Debug.Print "プリンタのポート:" & oPrint.PortName
        Debug.Print "プリンターの状態:" & getPrinterStatus(oPrint.PrinterStatus)
        Debug.Print "デフォルトプリンタ:" & oPrint.Default
    Next
    
    Set oPrint = Nothing
    Set oQrySet = Nothing
    Set oWMI = Nothing

End Sub

'*****************************************************************
' プリンターステータスの変換
'-----------------------------------------------------------------
'  第1引数:プリンターステータスの数値
'-----------------------------------------------------------------
'  戻り値 :プリンターステータスのる文字列
'*****************************************************************
Function getPrinterStatus(getStatus As Long)

    Select Case getStatus
    Case 1
        getPrinterStatus = "(1)その他"
    Case 2
        getPrinterStatus = "(2)不明"
    Case 3
        getPrinterStatus = "(3)アイドル状態"
    Case 4
        getPrinterStatus = "(4)印刷中"
    Case 5
        getPrinterStatus = "(5)ウォームアップ"
    Case 6
        getPrinterStatus = "(6)印刷の停止"
    Case 7
        getPrinterStatus = "(7)オフライン"
    End Select
        
End Function

 ■実行結果

※取得した値の一部は伏せた状態での画像になります