none
Word 2000 Druckoptionen abfragen oder ändern RRS feed

  • 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

     

    Dienstag, 16. November 2010 10:19

Alle Antworten

  • Hallo Raimung,

    was genau für Print-Parameter meinst Du?

    EIniges erhälst du direkt, wenn du die jeweilige Aktion mit dem Makrorekorder aufzeichnest.


    Gruß Christian
    Dienstag, 16. November 2010 13:17
  • 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.«
    Dienstag, 16. November 2010 19:10
  • 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

     

    Mittwoch, 17. November 2010 09:30
  • 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

    Mittwoch, 17. November 2010 10:08
  • 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 Sub

     

    erstelle 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
    Mittwoch, 17. November 2010 10:35
  • @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

     

    Donnerstag, 18. November 2010 07:54
  • 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

    Donnerstag, 18. November 2010 14:41