Excel VBAを使ってOSに登録されているプリンターの一覧を取得する方法をご紹介します。ちょっとした業務の中で、登録されているプリンターの情報が欲しい時、どうしますか?手動で確認するのは面倒ですよね。そんな時にこのマクロが役立ちます!
このコードの特徴
- 新しいワークシートにプリンターの一覧を出力。
- 既定のプリンターかどうかも一目で確認可能。
VBAコード
以下のコードを標準モジュールへコピペしてください。
Sub ListPrinters() Dim objWMIService As Object Dim colPrinters As Object Dim objPrinter As Object Dim ws As Worksheet Dim defaultPrinter As String Dim sheetName As String Dim sheetCounter As Integer Dim rowCounter As Integer ' WMIを使用して既定のプリンターを取得 Set objWMIService = GetObject("winmgmts:\\.\root\cimv2") Set colPrinters = objWMIService.ExecQuery("SELECT * FROM Win32_Printer WHERE Default = TRUE") For Each objPrinter In colPrinters defaultPrinter = objPrinter.Name Next ' 新しいワークシートを追加 sheetName = "Printers" sheetCounter = 1 Do While SheetExists(sheetName) sheetCounter = sheetCounter + 1 sheetName = "Printers (" & sheetCounter & ")" Loop Set ws = ThisWorkbook.Worksheets.Add ws.Name = sheetName ' WMIを使用してすべてのプリンターを取得 Set colPrinters = objWMIService.ExecQuery("SELECT * FROM Win32_Printer") ' プリンターの一覧をワークシートに書き出す rowCounter = 1 For Each objPrinter In colPrinters ws.Cells(rowCounter, 1).Value = objPrinter.Name If objPrinter.Name = defaultPrinter Then ws.Cells(rowCounter, 2).Value = "TRUE" Else ws.Cells(rowCounter, 2).Value = "FALSE" End If rowCounter = rowCounter + 1 Next ' オブジェクトを解放 Set colPrinters = Nothing Set objWMIService = Nothing End Sub Function SheetExists(sheetName As String) As Boolean Dim ws As Worksheet On Error Resume Next Set ws = ThisWorkbook.Worksheets(sheetName) On Error GoTo 0 If Not ws Is Nothing Then SheetExists = True Else SheetExists = False End If End Function
コードの使い方
- Excelを開き、VBAエディタ(Alt + F11)を起動します。
- 新しい標準モジュールを挿入し、提供されているコードをペーストします(挿入→標準モジュール)。
- VBAエディタを閉じてからマクロを実行すると、新しいワークシートにプリンターの一覧が出力されます。マクロを実行するために登録マクロの一覧を出すにはAlt + F8 を使います。
注意点
- VBAマクロはセキュリティのリスクがあるため、実行する前に必ず内容を確認してください。
- このマクロは安全ですが、他のソースから取得したマクロを実行する前には十分な注意が必要です。
- 既に「Printers」という名前のシートが存在する場合、新しいシートは「Printers (n)」のような名前で作成されます。
まとめ
Excel VBAを使用して簡単にプリンターの一覧を取得できることをお伝えしました。業務効率化の一助となることを願っています。
コメント