Get/Set Default Printer
List Printer
Function GetComputerNameEnviron() As String
GetComputerNameEnviron = Environ("COMPUTERNAME")
End Function
Sub ListPrinters(Optional ComputerName As String = ".")
Dim WMIService As Object
Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")
Dim Printers As Object
Set Printers = WMIService.ExecQuery("Select * from Win32_Printer")
Dim Printer As Object
Dim Item As Object
Dim Results
Dim r As Long, c As Long, NameIndex As Long
For Each Printer In Printers
ReDim Results(1 To Printers.Count + 1, 1 To Printer.Properties_.Count)
r = 1
For Each Item In Printer.Properties_
c = c + 1
If Item.Name = "Name" Then NameIndex = c
Results(r, c) = Item.Name
Next
Exit For
Next
For Each Printer In Printers
r = r + 1
c = 0
For Each Item In Printer.Properties_
c = c + 1
Results(r, c) = Item.Value
Next
Next
Dim SheetsInNewWorkbook As Long
SheetsInNewWorkbook = Application.SheetsInNewWorkbook
Application.SheetsInNewWorkbook = 2
With Workbooks.Add
With Worksheets(1)
.Range("A1").Resize(UBound(Results), UBound(Results, 2)).Value = Results
.Columns(NameIndex).Cut
.Columns(1).Insert Shift:=xlDown
.ListObjects.Add(xlSrcRange, .Range("A1").CurrentRegion, , xlYes).Unlist
.Columns.AutoFit
.Range("A1").CurrentRegion.Copy
End With
With Worksheets(2)
.Range("A1").PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:=False, Transpose:=True
Application.CutCopyMode = False
.Columns.AutoFit
End With
End With
Application.SheetsInNewWorkbook = SheetsInNewWorkbook
End Sub
Set Default Printer
Sub SetDefaultPrinter(PrinterName As String, Optional ComputerName As String = ".")
Dim Printer As Object, Printers As Object, WMIService As Object
Set WMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & ComputerName & "\root\cimv2")
Set Printers = WMIService.ExecQuery("Select * from Win32_Printer Where Name = '" & PrinterName & "'")
For Each Printer In Printers
Printer.SetDefaultPrinter
Next
End Sub
Share This