Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1964to1968
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA Drucker finden und in Variable speichern

VBA Drucker finden und in Variable speichern
26.02.2024 19:25:53
Jan
Hallo,

ich bin aktuell grade am verzweifeln, ich habe das Problem das ich zwei unterschiedliche Drucker ansteuern muss.

hier ist das Problem das die Drucker Ihre Adresse ab und zu ändern z.B. von "Ne00 auf Ne03".
ich brauche hier eine Funktion die mir die Drucker sucht und dann die Richtige Andresse in einer Variablen Speichert auf die ich dann mit anderen Funktionen zugreifen kann.
an dem PC arbeiten auch Personen die mit VBA so gar nichts am Hut haben, deswegen Ansteuerung über einen Button.
Die Druckersuche wollte ich über einen Button anstoßen (am besten einmal am Morgen) und danach sollen die Drucker über die Variable angesteuert werden.

ich hoffe das dies so möglich ist wie ich mir das vorstelle.

schon mal vielen Dank im Voraus.
Jan

14
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Drucker finden und in Variable speichern
26.02.2024 20:15:55
onur
Lass das einfach weg: "auf NeXY".
AW: VBA Drucker finden und in Variable speichern
27.02.2024 10:02:16
Herbert Grom
Hallo Jan,

probiers mal damit:

Option Explicit



Dim sDruckerToUse$, sStdDrucker$, sValue$, sKeyPath$
Dim oReg As Object, lCount&, arrPrinter, arrPrintList


Sub DruckenNachAuswahl()
'* hier einen Namensteil des zu benutzenden Druckers auswählen, der immer gleich bleibt
sDruckerToUse = "Brother QL-800"
Call DruckerAuswaehlen
End Sub


Sub DruckerAuswaehlen()
On Error GoTo ende

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

sStdDrucker = Application.ActivePrinter '* Standarddrucker festhalten

'* gewünschten Drucker auswählen und drucken
For lCount = 0 To UBound(arrPrinter)
If InStr(1, arrPrinter(lCount), sDruckerToUse) > 0 Then
oReg.GetStringValue HKEY_current_user, sKeyPath, arrPrinter(lCount), sValue
Application.ActivePrinter = arrPrinter(lCount) & Replace(sValue, "winspool,", " auf ")
ActiveSheet.PrintOut '* Drucken
Exit For
End If
Next
ende:
Application.ActivePrinter = sStdDrucker '* Standarddrucker wieder aktivieren
End Sub


Damit wird er den oben eingetragenen Drucker immer finden und ihm das jeweils aktuelle "Nexy" hinzufügen.

Servus

Anzeige
AW: VBA Drucker finden und in Variable speichern
27.02.2024 14:43:05
Oppawinni
Wenn es nur darum geht, den richtigen Port zu finden, ginge es wohl auch so:



Sub DruckerPortZuordnung()
Dim strDrucker As String
strDrucker = "Brother MFC-9142CDN Printer"
strDrucker = strDrucker & " auf " & GetPrinterPort(strDrucker)
On Error Resume Next
Application.ActivePrinter = strDrucker
If Err > 0 Then MsgBox "Drucker nicht gefunden"
On Error GoTo 0
Debug.Print Application.ActivePrinter
End Sub

Function GetPrinterPort(strPrinterName As String) As String
Dim objReg As Object
Dim strRegVal As String
Dim strValue As String
Const HKEY_CURRENT_USER = &H80000001
Set objReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\default:StdRegProv")
strRegVal = "Software\\Microsoft\\Windows NT\\CurrentVersion\\PrinterPorts\\"
objReg.GetStringValue HKEY_CURRENT_USER, strRegVal, strPrinterName, strValue
GetPrinterPort = Mid$(strValue, 10, 5)
End Function

Anzeige
AW: VBA Drucker finden und in Variable speichern
26.02.2024 20:59:21
Jan
Danke Schon mal für die schnelle Rückmeldung.

Wenn ich jetzt aber das so ändere

von
Application.ActivePrinter = "Epson ET-2710 Series auf Ne05:" -- hier schmeisst er mir den Laufzeit error

auf

Application.ActivePrinter = "Epson ET-2710 Series"

dann bekomme ich eine Laufzeit error bei genau der Zeile.
dies wäre ein Teil der funktion:


If Worksheets("Tabelle1").Range("C6").Value = "Test CH" Then

Application.ActivePrinter = "Epson ET-2710 Series" --- ist der Drucker bei mir zuhause

Sheets(1).PrintOut

-------ab hier habe ich es zum testen zuhause auskommentiert-----

'Application.ActivePrinter = "Brother QL-800 auf Ne00:" -- ist ein Etikettendrucker der angesteuert werden soll
'
'
' With Sheets("etikett_ch")
' .PageSetup.PrintArea = "$A$1:$D$10"
' .PrintOut
' .PrintOut Copies:=1
' End With
'Application.ActivePrinter = "Brother MFC-9142CDN Printer auf NE05:" -- ist der Normale Drucker der angesteuert werden soll.
------ auskommentierung ende----

End If


nochmals vielen Dank.
Anzeige
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



Anzeige
AW: VBA Drucker finden und in Variable speichern
26.02.2024 21:30:30
onur
Sub Druckerzuordnung()

For i = 1 To 9
On Error Resume Next
Application.ActivePrinter = "Brother MFC-9142CDN Printer auf Ne05:"
If Err = 0 Then Application.ActivePrinter = "Brother MFC-9142CDN Printer auf Ne0" & i & ":":Exit For
Next i
On Error GoTo 0
End Sub
Versteh ich nicht
27.02.2024 10:04:47
Oppawinni
muss das nicht eher so aussehen:


Sub Druckerzuordnung()

On Error Resume Next
Application.ActivePrinter = "Brother MFC-9142CDN Printer auf Ne05:"
' im Fehlerfall versuchen den richtigen Port zu finden
If Err > 0 Then
For i = 1 To 9
Application.ActivePrinter = "Brother MFC-9142CDN Printer auf Ne0" & i & ":"
If Err = 0 Then
Err.Clear
Exit For
End If
Next i
End If
If Err > 0 Then MsgBox "Drucker nicht gefunden"
On Error GoTo 0
Debug.Print Application.ActivePrinter

End Sub


inwieweit es etwas bringen würde, im Fehlerfall den Druckerdialog aufzurufen, kann ich nicht sagen:

Sub DruckerWahl()


On Error Resume Next
Application.ActivePrinter = "Brother MFC-9142CDN Printer auf Ne05:"

'Im Fehlerfall Druckerdialog aufrufen
If Err > 0 Then Application.Dialogs(xlDialogPrinterSetup).Show

Err.Clear
On Error GoTo 0
Debug.Print Application.ActivePrinter
End Sub
Anzeige
AW: Versteh ich nicht
27.02.2024 10:19:39
Oppawinni
Noch ein Fehler



Sub Druckerzuordnung()

On Error Resume Next
Application.ActivePrinter = "Microsoft Print to PDF auf Ne05:"
' im Fehlerfall versuchen den richtigen Port zu finden
If Err > 0 Then
For i = 1 To 9
Err.Clear
Application.ActivePrinter = "Microsoft Print to PDF auf Ne0" & i & ":"
If Err = 0 Then
Err.Clear
Exit For
End If
Next i
End If
If Err > 0 Then MsgBox "Drucker nicht gefunden"
On Error GoTo 0
Debug.Print Application.ActivePrinter

End Sub


Anzeige
AW: Versteh ich nicht
27.02.2024 10:36:17
Onur
Stimmt - DAS sollte reichen:



Sub Druckerzuordnung()
Dim i
For i = 1 To 9
On Error Resume Next
Application.ActivePrinter = "Brother MFC-9142CDN Printer auf Ne0" & i & ":"
Next i
On Error GoTo 0
End Sub
AW: Versteh ich nicht
27.02.2024 16:23:46
Oppawinni
Was mich daran noch stört, ist dieses " auf ", das offensichtlich lokalisiert ist.
Vielleicht sollte man das eher so machen, dass man dieses "auf" aus dem ActivePrinter bezieht......ok vielleicht Spielerei,
aber sowas hat halt manchmal seine Tücken, mir ging es öfter so, dass einer meiner Kollegen das Dezimalzeichen anderes eingestellt hat,
oder mal französisch umgestellt hat, weil der gerade etwas "baguette" lernen will usw...



Sub DruckerPortZuordnung()

Dim strPrinter As String
Dim strOnLocal As String
Dim i As Long
Dim v As Variant

strPrinter = "Brother MFC-9142CDN Printer"

v = Split(Application.ActivePrinter, " ")
strOnLocal = Space(1) & v(UBound(v) - 1) & Space(1)

For i = 1 To 9
On Error Resume Next
Application.ActivePrinter = strPrinter & strOnLocal & "Ne0" & i & ":"
If Err = 0 Then Exit For
Next i
If Err > 0 Then MsgBox "Drucker nicht gefunden"

Debug.Print Application.ActivePrinter

End Sub
Anzeige
AW: Versteh ich nicht
27.02.2024 16:26:45
Onur
Wieso?
Bei MIR steht als ActivePrinter:
"Canon TS700 series auf Ne05:"
AW: Versteh ich nicht
27.02.2024 16:39:42
Oppawinni
Ich hab ein bisschen den Gockel befragt und der sagt, dass z.B. beim
- Enländer : "Canon TS700 series on Ne05:"
- Franzosen: "Canon TS700 series sur Ne05:"
- Holländer: "Canon TS700 series op Ne05:"
...
stehen würde.
AW: Versteh ich nicht
27.02.2024 16:46:30
Onur
Was genau ist jetzt das Problem? Dass der Frager in Thailand wohnt und die Thaiversion von Windows hat? :)
So in etwa (owT)
27.02.2024 17:34:06
Oppawinni
Aber im Grunde hatte ich ja schon geschrieben, dass es in einer Gruppe von Anwendern verschiedene Einstellungen geben könnte....Thai, wer weiß.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige