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を使用して簡単にプリンターの一覧を取得できることをお伝えしました。業務効率化の一助となることを願っています。
コメント