beidermachtvongreyscull
Goto Top

Per VBA die Papierfächer eines Druckers zuweisen

Hallo liebe Kolleginnen und Kollegen,

ich habe ein Word-Macro gebaut, welches eine vom Nutzer festgelegte Anzahl an Drucken entsprechend ausdruckt.
Dabei soll die erste Seite aus einem bestimmten Druckerfach kommen (Briefbogen).

Das eigentliche Kern-Modul wird durch ein Formular aufgerufen, in dem der Benutzer die Anzahl der Kopien festlegt und mittels Radio-Button das Fach der ersten Seite auswählt.
Der Radio-Button entscheidet, welches Modul aufgerufen wird (was Ihr unten seht ist nur eins von zwei) und die Module fragen eine public Variable ab.

Private Sub ProDruSSSB()
'Ausdruck umstellen  
'Erste Seite aus oberem Fach, alle anderen aus dem Standardfach des Druckers  
With ActiveDocument.PageSetup
    .FirstPageTray = wdPrinterUpperBin
    .OtherPagesTray = wdPrinterDefaultBin
End With

Do While numKopien > 0
    'aktives Dokument drucken  
    Dim bOption As Boolean
    bOption = Options.WarnBeforeSavingPrintingSendingMarkup
    Options.WarnBeforeSavingPrintingSendingMarkup = False
    Application.PrintOut Range:=wdPrintAllDocument, _
        Item:=wdPrintDocumentContent, Copies:=1
    Options.WarnBeforeSavingPrintingSendingMarkup = bOption
    'ActiveDocument.PrintOut Copies:=1  

    numKopien = numKopien - 1
    frmProDruSS.Label6.Caption = numKopien
    frmProDruSS.Label5.Caption = "ACHTUNG: Kopienzähler läuft rückwärts und zeigt jetzt die noch zu fertigenden Kopien an. Dieses Fenster schließt sich selbsttätig. Bitte haben Sie einen Moment Geduld."  
    DoEvents
Loop

'Fachzuweisung wieder aufheben  
With ActiveDocument.PageSetup
  .FirstPageTray = wdPrinterDefaultBin
  .OtherPagesTray = wdPrinterDefaultBin
End With
End Sub

Beim ersten mal funktioniert es soweit.
Wenn der Nutzer dann ein anderes Dokument ausdruckt, erscheint dessen erste Seite auf normalem Papier.

Ich weiß nicht weiter.
Ich hatte die Codeblöcke "Ausdruck umstellen" und "Fachzuweisung wieder aufheben" auch schon in der Loop-Schleife, aber das Ergebnis ist gleich.

Hat jemand von Euch eine Idee, was ich da falsch mache?

Ich danke Euch jetzt schon.

Andreas

Content-Key: 347720

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

Ausgedruckt am: 29.03.2024 um 05:03 Uhr

Mitglied: Pjordorf
Pjordorf 30.08.2017 um 12:41:23 Uhr
Goto Top
Hallo,

Zitat von @beidermachtvongreyscull:
Wenn der Nutzer dann ein anderes Dokument ausdruckt, erscheint dessen erste Seite auf normalem Papier.
Und wenn die Anwendung (Word) da zwischen neu gestartet wird?

Ich weiß nicht weiter.
Evtl. die Druckerparameter vorher auslesen/sichern um nach dem drucken den Ausgangszustand (Word starten) wieder herzustellen? Macht Excel auch späne? Diese Anwendungen nutzen ja die geänderten Einstellung weiter solange die gestarte sind bzw. im RAM liegen. Word neustart dazwischen sollte/könnte das Problem lösen (unschön....)

Ich hatte die Codeblöcke "Ausdruck umstellen" und "Fachzuweisung wieder aufheben" auch schon in der Loop-Schleife, aber das Ergebnis ist gleich.
Vielleicht den Windows Standarddrucker wieder einlesen?

Hat jemand von Euch eine Idee, was ich da falsch mache?
Nur ne blöde Idee von mir.

Gruß,
Peter
Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 30.08.2017 um 13:41:09 Uhr
Goto Top
Zitat von @Pjordorf:

Hallo,

Zitat von @beidermachtvongreyscull:
Wenn der Nutzer dann ein anderes Dokument ausdruckt, erscheint dessen erste Seite auf normalem Papier.
Und wenn die Anwendung (Word) da zwischen neu gestartet wird?

Dann habe ich die Ausgangsstellung, die ich eigentlich mit dem Codeblock "Fachzuweisung wieder aufheben" setze.


Ich weiß nicht weiter.
Evtl. die Druckerparameter vorher auslesen/sichern um nach dem drucken den Ausgangszustand (Word starten) wieder herzustellen? Macht Excel auch späne? Diese Anwendungen nutzen ja die geänderten Einstellung weiter solange die gestarte sind bzw. im RAM liegen. Word neustart dazwischen sollte/könnte das Problem lösen (unschön....)


Wird nichts bringen. Hierbei handelt es sich um Anwendungseinstellungen. Die Anwendung sagt dem Drucker "Für den nächsten Druck mache folgendes...". Diese Einstellungen sind normal nur für den folgenden Druckjob gültig und werden vom Treiber befolgt, solange der kein Problem darin sieht. Ein Beispiel: Versuch mal aus Adobe Reader ein farbiges Dokument auszudrucken und stell im Druckertreiber mal auf schwarz/weiß. Es kommt dennoch in Farbe raus. Wenn Du im Druckdialog der Anwendung den Haken setzt "In Graustufen drucken", dann kommt es auch so raus.

Ich hatte die Codeblöcke "Ausdruck umstellen" und "Fachzuweisung wieder aufheben" auch schon in der Loop-Schleife, aber das Ergebnis ist gleich.
Vielleicht den Windows Standarddrucker wieder einlesen?

Wie erwähnt. Bringt nichts.


Hat jemand von Euch eine Idee, was ich da falsch mache?
Nur ne blöde Idee von mir.

Dennoch vielen Dank.

Gruß,
Peter

Gruß,
Andreas
Mitglied: Pjordorf
Pjordorf 30.08.2017 um 14:02:25 Uhr
Goto Top
Zitat von @beidermachtvongreyscull:
Dann habe ich die Ausgangsstellung, die ich eigentlich mit dem Codeblock "Fachzuweisung wieder aufheben" setze.
Si, gesehen, gelesen, registriert, verstanden (auch vorher schon)face-smile

Nur ne blöde Idee von mir.
Wie gesagt nur ne Idee.... face-smile

Gruß,
Peter
Mitglied: beidermachtvongreyscull
beidermachtvongreyscull 10.11.2017 um 09:01:55 Uhr
Goto Top
Ich habe meine Lösung gefunden!

Es gibt Druckertreiber, die ein Problem mit enumerierten Konstanten wie wdPrinterDefaultBin und dergleichen haben.
Hinter jeder Konstante verbirgt sich ein numerischer Wert.

Dieser kann von Treiber zu Treiber abweichen. Also wie herausfinden?

Über ein VBA-Macro? Das war nicht zielführend weil eben anstelle einer echten Tray-ID tatsächlich die literalen Konstanten aufgezeichnet wurden:
wdPrinter...Bin

Ich fand ein recht unscheinbares altes Programm:
http://www.oraxcel.com/projects/printertrays/

Die kostenlose Lite-Version reicht völlig aus (wenn man von etwaigen Fehlern unter W10 absieht):
tid

So habe ich nun eindeutige numerische Werte für mein Macro bekommen und kann eine Fehlerquelle ausschließen.