VBA Makro auf bestimmtem Netzwerkdrucker drucken

BigShot

Enthusiast
Thread Starter
Mitglied seit
06.02.2006
Beiträge
8.472
Ich möchte gerne Makros erstellen, die einen bestimmten Druckbereich auf einem Etikettendrucker ausdrucken und anschließend den Standard-Drucker wieder herstellen.

Der Aufbau ist folgender:
  1. Es gibt einen Drucker(1), welcher lokal auf PC1 angeschlossen ist. Über die Windows-Druckerfreigabe ist dieser für PC2 und PC3 freigegeben.
  2. Es gibt einen Drucker(2), der im Netzwerk hängt und über Server1 freigegeben ist.

Folgendes einfache Makro druckt nun bei PC1 auf Drucker1:
Sub PrintTest()
Dim xlOldPrinter As String
xlOldPrinter = Application.ActivePrinter
Worksheets("Tabelle 1").PrintOut copies:=1, ActivePrinter:="Drucker2"
Application.ActivePrinter = xlOldPrinter
End Sub


Für PC1 konnte ich nun das Makro für Drucker2 anpassen:
Sub PrintTestTTP345()
Dim xlOldPrinter As String
Worksheets("Tabelle 8").PrintOut copies:=1, ActivePrinter:="\\srv1\Drucker1 auf Ne06:"
Application.ActivePrinter = xlOldPrinter
End Sub



Soweit sogut. Mein Problem ist nun folgendes:
das "\\srv1\Drucker1 auf Ne06:" ist bei PC2 z.B. Ne07:


Wie könnte ich das abfragen? Bzw. gibt es eine Lösung ohne das "auf NeXX:"?

Oder gibt es eine Art on Error Resume und dann zähle ich alle verschiedenen Varianten auf?
Bei PC2 und PC3 heißt der Drucker2 natürlich nicht nur "Drucker2" sonder \\PC1\Drucker2 auf NeXX:"...

Ich möchte ungern für alle PCs eigene Makros und Buttons erzeugen. Da es eine Netzwerkdatei ist in der alle arbeiten, fallen auch individuell angepasste Dateien raus.

Vielen Dank im Voraus!

 
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
Das Problem kannst du mit einer Schleife lösen:
For i = 1 To 9
On Error Resume Next
Application.ActivePrinter = "\\PrinterName auf Ne0" & i & ":"
End If
Next i

Dann ist es egal, ob der auf NE01 oder NE09 etc. hängt.
Der Code geht NE01 bis NE09 durch und wirft einen Fehler, wenn es den Drucker nicht gibt.
Durch die On Error Anweisung wird aber keine Fehlermeldung ausgegeben, sondern mit der nächsten Anweisung fortgefahren.
Bei Fehler ändert sich Application.ActivePrinter nicht, ergo steht am Ende der Schleife der existierende Drucker drin.

Der Code müsste dann also so oder ähnlich aussehen:
Sub PrintTestTTP345()
Dim xlOldPrinter As String
For i = 1 To 9

On Error Resume Next
Application.ActivePrinter = "\\PrinterName auf Ne0" & i & ":"
End If
Next i

Worksheets("Tabelle 8").PrintOut copies:=1
Application.ActivePrinter = xlOldPrinter
End Sub
 
Zuletzt bearbeitet:
Vielen Dank für deinen Tipp. Leider scheint Excel damit Probleme zu haben.

Folgendes Ergebnis:
Bei einem Computer ist der Drucker als ....NE05 gespeichert. Hier wird 4x (also für Ne01, Ne02, Ne03, Ne04 die es nicht gibt) auf dem Standard-Drucker gedruckt.
Danach wird 1x korrekt auf dem Drucker ...NE05 gedruckt und noch 4x auf ...NE05 (für NE06, NE07, NE08, NE09 die es nicht gibt).

Bei einem anderen Computer ist der Drucker als ...NE07 gespeichert, gleiches Problem wie oben..

Das "on Error" scheint nicht zu funktionieren.

Noch eine andere Idee?
 
Seltsam, da sollte nichts 9 mal ausgedruckt werden, denn der Druckbefehl befindet sich ja gar nicht innerhalb der Schleife, sondern danach.
Die For-Next-Schleife wird 9 mal durchlaufen und erst dann kommt der Druckbefehl und danach wird der Standarddrucker zurückgesetzt und die Prozedur beendet.
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh