Fragensteller
Word 2000 Druckoptionen abfragen oder ändern

Frage
-
Hallo Expertenrunde!
Aus juristischen Gründen müssen wie den User bei speziellen Dokumenten ein wenig an die Kette legen: jeder Druckvorgang soll nur ein einziges Exemplar drucken.
Anders gesagt: der Parameter "Anzahl" darf beim Druck nur auf 1 stehen.
Zu diesem Zweck haben wir eine Ereignisroutine ...DocumentBeforePrint, die zunächst ermittelt, ob es sich um ein kritisches Dokument handelt.
Aber wie komme ich jetzt an die Print-Paramter ran? (Analog zu PageSetup)
Vielen Dank für Tipps
Raimund Gryszik, Berlin
Alle Antworten
-
Ich überlege gerade…
DocumentBeforePrint mag geeignet sein am DOC noch etwas zu drehen, aber mir ist nicht ganz klar wie das den Druckbefehl der ja eben nicht als Makroanweisung vorliegt beeinflussen kann.
Wenn man nicht all das was eine einem Aufgezeichneten Befehl zur Hand hat in jenem Makro abfragen kann dann müsste ich passen.
Kann man das aber sollte man die 1 so zuweisen können wie man eine 5 dort ausliest. Oder man muss alle Daten sammeln, den Druckauftrag vernichten und im Makro selbst adaptiert absetzen.
Eric
Eric March • »Kenne die Vergangenheit! In der Unwissenheit über die Vergangenheit liegt das Verderben der Zukunft.« -
Danke an alle!
Hier die Erklärung dafür, dass es keine Lösung gibt (es geht übrigens um Rechnungslegung):
1. Der Druck-Dialog liegt außerhalb von Word, und kann deshalb mit VBA-Mitteln nicht gelesen oder verändert werden.
2. Das Event DocumentBeforePrint wird ausgelöst, bevor der User den Drucker und die Druckeinstellungen wählt. Nachdem er das dann getan hat, gibt es kein Event und also auch keine Einflussmöglichkeit mehr.
-----------------
Zwar kann ich die Druckparameter (in diesem Fall die Anzahl Exemplare) per API lesen und einstellen, aber nach Punkt 2 weiß ich ja noch nicht mal, auf welchen Drucker der User drucken will.
Deshalb werden wir eine organisatorische Lösung einsetzen. Als Workaround werde ich natürlich so vorgehen, wie auch Eric vorschlägt: den Original-Druckauftrag canceln und in der Eventroutine self-made auf den Standarddrucker mit der von mir gewünschten Anzahl drucken.
Raimund
-
Hallo Raimund
Du könntest in der Vorlage eine Public Sub FilePrint() einrichten und damit den eingebauten Befehl übersteuern.
Innerhalb der Routine lässt Du mit Word.Dialogs(wdDialogFilePrint).Display den Druckdialog nur anzeigen, aber nicht ausführen.
Und wenn der User nicht abgebrochen hat übernimmst Du die Parameter und gibst das Dokument mit ActiveDocument.PrintOut aus und hängst dabei die erforderlichen Paramter inkl. Copies:=1 an.Den erneuten Ausdruck kannst Du im DocumentBeforPrint-Ereignis mit Cancel = True verhindern.
Hang loose, Hartwig
-
Hallo Raimund,
teste mal bitte folgendes:
Erstelle ein neues Klassenmodul "Klasse1" mit folgendem Inhalt
Public WithEvents oApp As Word.Application Private Sub oApp_DocumentBeforePrint(ByVal Doc As Document, Cancel As Boolean) With Application.Dialogs(wdDialogFilePrint) .NumCopies = 1
.Execute End With Cancel = True End Suberstelle ein neues Modul mit folgendem Inhalt:
Dim objClass As New Klasse1 Sub Cls_Init() Set objClass.oApp = Word.Application End Sub
teste, ob es die Anzahl der Kopien auch auf 1 zurücksetzt, wenn du einen anderen Wert angibst.
Teste bitte auch mal einen anderen Drucker damit ob alles wie gewünscht läuft.
HTH
Gruß Christian -
@Hartwig, @Christian: Danke für die Tipps!
Die Idee mit dem .Dialogs(wdDialogFilePrint) ist super, die hatte mir gefehlt! Ich werde es später probieren, denn wir haben jetzt erst mal eine vergleichsweise simple Lösung mit einer Eventroutine in den Einsatz gebracht.
Auch die Idee mit dem Sub FilePrint ist prima. Sie hat jedoch den Nachteil, dass sie ausschließlich dem Menupunkt "Drucken" folgt. Das DocumentBeforePrint-Ereignis wird aber auch ausgelöst, wenn der User das Drucker-Icon anklickt oder im Windows-Dateiexplorer im Kontextmenu der Datei "Drucken" wählt.
Danke
Raimund
-
Hallo Raimund,
> Auch die Idee mit dem Sub FilePrint ist prima. Sie hat jedoch den Nachteil,
> dass sie ausschließlich dem Menupunkt "Drucken..." folgt.
Richtig, denn nur dabei kann im zugehörigen Dialog vom Anwender die Kopienzahl gewählt werden. Der Job FilePrintDefault druckt immer einfach, muss also nicht abgefangen werden.> Das DocumentBeforePrint-Ereignis wird aber auch ausgelöst, wenn der User
> das Drucker-Icon anklickt oder im Windows-Dateiexplorer im Kontextmenu
> der Datei "Drucken" wählt.Na hoffentlich. Und dabei hast Du Gelegenheit, den Druckjob noch zu canceln, wenn Dein interner Ausdruckzähler signalisiert, dass bereits ein Ausdruck des Dokuments erfolgt ist.
Aber wie wird sicher gestellt, dass jeder zulässige Druckversuch auch zum perfekt ausgedruckten Dokument geführt hat?Hang loose, Hartwig