【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メソッドを寸止めしてるのが裏技っぽいので記事にしました。一覧の使い道(必要性)は分かりません。