わーぷろおじさん

WordやOffice関連の小細工の備忘録。

【Excel VBA】簡単にNeポート番号付きのプリンタ名一覧を取得する裏技

コード

参照設定:Microsoft Shell Controls And Automation

Sub Test()
    Dim myPrinter As String
    myPrinter = Application.ActivePrinter
   
    Dim Shell As Shell32.Shell
    Set Shell = New Shell32.Shell
    Dim Printer As Shell32.FolderItem2
    For Each Printer In Shell.Namespace(ssfPRINTERS).Items
        On Error Resume Next
        Call ThisWorkbook.PrintOut(From:=0, ActivePrinter:=Printer.Name)
        On Error GoTo 0
        Debug.Print Application.ActivePrinter
    Next
   
    Application.ActivePrinter = myPrinter
End Sub

PrintOutメソッドのFrom:=0がポイント。To:=0でもCopiese:=0でもOK。エラーで印刷は実行されません。

※ポート番号なしのプリンター名の取得方法はShellの他にもいろいろですが説明は省略。

感想

エラーでPrintOutメソッドを寸止めしてるのが裏技っぽいので記事にしました。一覧の使い道(必要性)は分かりません。