nullacht15
Goto Top

Excelsheet I Makro I mehrere Drucker drucken

Guten Morgen,

bevor ich mein Problem schildere, will ich erwähnen, dass ich mit dem verwenden von Makros in Office noch nicht sonderlich viel zu tun hatte bis dato, also bitte seit gnädig mit mir ^^

Es geht darum, dass ich ein Sheet aus einer Excel Datei mithilfe von einem Makro auf mehreren Druckern ausdrucken will.
Das Drucken auf dem Standartdrucker ist weniger das Problem, Fehler bekomme ich jedoch wenn auf mehreren Druckern auf einmal drucken will ....

Hier einmal ein Teil meines Codes:

Private Sub CommandButton1_Click()
Sheets("Name des Sheets").Printout

Application.ActivePrinter = "Name des Druckers"
Sheets("Name des Sheets").Printout
End Sub

Will ich dieses Makro ausführen, so kommt folgende Fehlermeldung:
"Laufzeitfehler 438: Objekt untersützt diese Eigenschaft oder Methode nicht"


Kann mir jemand spontan auf die Sprünge helfen?
Vielen Dank schon mal

Content-Key: 178960

Url: https://administrator.de/contentid/178960

Printed on: April 19, 2024 at 02:04 o'clock

Member: Xolger
Xolger Jan 16, 2012 at 08:25:36 (UTC)
Goto Top
Guten Morgen nullacht15,

Mit dem folgenden Code sollte es funktionieren.


Private Sub CommandButton1_Click()
Sheets("Tabelle1").PrintOut ActivePrinter:="Microsoft XPS Document Writer"  

End Sub

"Tabelle1" und der Druckername sind natürlich entsprechend zu ändern.

Gruß
Xolger
Member: nullacht15
nullacht15 Jan 16, 2012 at 08:40:14 (UTC)
Goto Top
Hallo Xolger,

das ausdrucken auf einem einzigen Drucker funktioniert einwandfrei, auch wenn es sich nicht um den Standartdrucker handelt. Mein Problem ist nur, dass ich das Sheet auf 5 Druckern nacheinander mithilfe eines Makros ausdrucken würde, aber sobald er beim 2. Drucker ausdrucken will kommt die oben genannte Fehlermeldung (Laufzeitfehler 438).

Hast du hierzu noch einen Vorschlag?
Member: Xolger
Xolger Jan 16, 2012 at 08:50:52 (UTC)
Goto Top
Hallo nullacht15,

Die Fehlermeldung kann ich leider nicht nachvollziehen,
in der folgenden Variante wird erst auf XPS und dann auf Fax gedruckt.


Private Sub CommandButton1_Click()
Sheets("Tabelle1").PrintOut ActivePrinter:="Microsoft XPS Document Writer"  
Sheets("Tabelle1").PrintOut ActivePrinter:="Fax"  
End Sub

Beim "direkten" Ansprechen von
Application.ActivePrinter = "Fax"  
bekomme ich aber auch eine Fehlermeldung (1004).
Daher die Verwendung von ActivePrinter:="Fax" als optionaler Parameter von PrintOut.


Gruß
Xolger

(Getestet unter W7 64bit und Office2010)
Member: nullacht15
nullacht15 Jan 16, 2012 at 08:58:49 (UTC)
Goto Top
Hmm seltsam ... Habe deinen Code eben übernommen und an mein Beispiel angepasst (sprich: richtiger Tabellenname und die richtigen Drucker) und es kommt wieder der Laufzeitfehler (438).

Ich probiere das ganze übrigens mit Office 2003 unter Citrix.

Weitere Ideen?
Member: Xolger
Xolger Jan 16, 2012 at 09:22:09 (UTC)
Goto Top
Hmm,

habe es nochmal unter Windows XP Prof. mit
einem alten Office 2000 getestet und es lief ohne
Probleme.

Und selbst wenn ich "Fax" in "Fax1" umbenenne,
druckt das Makro noch auf den ersten Drucker.

Den ":= " hast du auch übernommen,
denn beim "=" kommt es zu einer Fehlermeldung.


Gruß
Xolger
Member: nullacht15
nullacht15 Jan 16, 2012 at 11:01:17 (UTC)
Goto Top
Also ich hab es wirklich komplett so übernommen ...
Hier noch einmal der Code:

Sheets("Name").PrintOut ActivePrinter:="Druckername"  
Sheets("Name").PrintOut ActivePrinter:="Druckername"  

Die Druckernamen habe ich mithilfe von "MsgBox Application.ActivePrinter" getestet, daran sollte es also defintiv nicht liegen ... Wie gesagt, der Fehler taucht erst auf, sobald ich das ausdrucken auf mehr als einem Drucker probiere.

Muss zwischen die zwei Druckfunktionen noch irgendein Befehl, den ich einfach nicht kenne?
Member: nullacht15
nullacht15 Jan 17, 2012 at 07:02:10 (UTC)
Goto Top
hat keiner mehr eine Idee oder einen möglichen Lösungsansatz?
Member: nullacht15
nullacht15 Jan 17, 2012 at 10:48:18 (UTC)
Goto Top
Das Problem ist gelöst! Mit folgendem Code funktioniert es:

Dim std As String
std = Application.ActivePrinter

ActivePrinter = "Druckerbezeichnung1"  
Sheets("Blattname").PrintOut  

ActivePrinter = "Druckerbezeichnung2"  
Sheets("Blattname").PrintOut  

' Am Ende wieder den Standartdrucker zuweisen  
ActivePrinter = std

Ganz wichtig ist, dass man auf die genauen Druckerbezeichnungen achtet.
Beispiel: "\\PRINTSERVER\DRUCKERNAME auf Ne03:"

Vielen Dank für die Ansätze und schönen Tag noch