AW: Ausdruck auf verschiedenen Druckern
30.08.2025 15:07:40
ralf_b
ich würds vielleicht so machen, mittels Funktion, die den System Standarddrucker ändert.
Sub Print002()
Dim Standarddrucker As String
Standarddrucker = Application.ActivePrinter
If changePrinter(Worksheets("Einstellungen").Range("A4").Text) Then
Worksheets("Laufblatt").PrintOut Copies:=1
changePrinter Standarddrucker
Else
MsgBox "Drucker nicht gefunden- Blatt nicht gedruckt.", vbCritical + vbOKOnly
End If
End Sub
Function changePrinter(sPrinter As String) As Boolean
Dim bfound As Boolean
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
For Each objItem In objWMI
' If objItem.Name = sPrinter Then 'druckername ist identisch mit Text
If InStr(1, sPrinter, objItem.Name) > 0 Then 'druckername kommt im Text vor
objItem.SetDefaultPrinter
bfound = True
Exit For
End If
Next
changePrinter = bfound
Set objWMI = Nothing
Set objItem = Nothing
End Function
oder so ohne den systemdrucker zu ändern. hier wird nur der korrekte Name ermittelt und verwendet.
Sub Print03()
Dim sTempdrucker As String
sTempdrucker = Worksheets("Einstellungen").Range("A4").Text
If getPrinterName(sTempdrucker) Then
Worksheets("Laufblatt").PrintOut Copies:=1, ActivePrinter:=sTempdrucker
Else
MsgBox "Drucker nicht gefunden- Blatt nicht gedruckt.", vbCritical + vbOKOnly
End If
End Sub
Function getPrinterName(ByRef sPrinter As String) As Boolean
Dim bfound As Boolean
Set objWMI = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("Select * from Win32_Printer")
For Each objItem In objWMI
If InStr(1, sPrinter, objItem.Name) > 0 Then 'druckername kommt im Text vor
sPrinter = objItem.Name
bfound = True
Exit For
End If
Next
getPrinterName = bfound
Set objWMI = Nothing
Set objItem = Nothing
End Function
ist aber ungetestet !