AW: VBA Drucker finden und in Variable speichern
26.02.2024 21:17:14
ralf_b
Hier mal was aus der Mottenkiste. Kommst du damit zurecht? Ich habs heute nicht getestet muß aber mal funktionert haben.
Option Explicit
'Standarddrucker: Xerox WorkCentre 3220 (Kopie 1) auf Ne00:
'der Zieldrucker: TEC B-SA4T (203 dpi) auf Ne02:
Sub Drucken_mit_gewuenschtemDrucker()
Dim sGewünschterDrucker$, iRow%
sGewünschterDrucker = "TEC B-SA4T (203 dpi)"
Call DruckerAuflisten 'Funktionsaufruf
With Tab_Druckerliste
'* FarbDrucker auswählen
For iRow = 3 To 25
If InStr(1, .Cells(iRow, 1), sGewünschterDrucker) > 0 Then
Application.ActivePrinter = .Cells(iRow, 1)
Exit For
End If
Next iRow
'* Drucken
ActiveSheet.PrintOut '* evtl. anpassen!!!
'* StandardDrucker zurück holen/einstellen
For iRow = 3 To 25
If InStr(1, .Cells(iRow, 1), "Xerox WorkCentre 3220 (Kopie 1)") > 0 Then
Application.ActivePrinter = .Cells(iRow, 1)
Exit For
End If
Next iRow
End With
End Sub
Sub DruckerAuflisten()
Dim oReg As Object, iCount%, sKeyPath$, sValue$, arrPrinter As Variant, arrPrintList, sBereich$
Const HKEY_CURRENT_USER = &H80000001
sKeyPath = "Software\Microsoft\Windows NT\CurrentVersion\Devices"
Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
oReg.EnumValues HKEY_CURRENT_USER, sKeyPath, arrPrinter
With Tab_Druckerliste
sBereich = "A3:A25"
Application.EnableEvents = False
.Range(sBereich).ClearContents
arrPrintList = .Range(sBereich)
For iCount = 0 To UBound(arrPrinter)
oReg.GetStringValue HKEY_CURRENT_USER, sKeyPath, arrPrinter(iCount), sValue
arrPrintList(iCount + 1, 1) = arrPrinter(iCount) & Replace(sValue, "winspool,", " auf ")
Next
.Range(sBereich).Value = arrPrintList
Application.EnableEvents = True
End With
End Sub