Clever-Excel-Forum

Normale Version: BeforePrint und PrintOut
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,
ich möchte vor und nach dem Drucken durch ein Makro eine Aktion ausführen. Ich habe dies folgendermaßen umgesetzt:
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
Application.EnableEvents = False

AktionVorDruck
ActiveWindow.SelectedSheets.PrintOut
AktionNachDruck

Application.EnableEvents = True
End Sub
Ich verwende Excel in der Version 2013. Ich starte den Druckvorgang über "Datei/Drucken". Mein Problem ist, dass PrintOut nicht die Anzahl der zu druckenden Exemplare übernimmt (ich weiß, dass ich mit Cancel = True den Druck abbreche). Kann ich den Wert der Exemplare irgendwie übernehmen (Copies:=Exemplare)? Ich habe es auch schon über einen PrintDialog anstelle PrintOut versucht:
Code:
Application.Dialogs(xlDialogPrint).Show
Hierbei wird jedoch immer ein Exemplar mehr gedruckt als ich angebe.
Ich hoffe, mir kann jemand weiterhelfen.
Vielen Dank,
Martin
Hallo Martin,

wozu benötigst Du das Before-Print-Ereignis?
Hallo Stefan, hallo Martin,
Zitat:Mein Problem ist, dass PrintOut nicht die Anzahl der zu druckenden Exemplare übernimmt (ich weiß, dass ich mit Cancel = True den Druck abbreche). Kann ich den Wert der Exemplare irgendwie übernehmen (Copies:=Exemplare)? Ich habe es auch schon über einen PrintDialog anstelle PrintOut versucht:
Das liest sich für mich, wenn ich das richtig verstanden habe so, als ob es mit einer einfachen Zählschleife erledigt wäre.
Ich habe Folgendes verstanden, der Code, so wie er jetzt ist, liefert zu viel Ausdrucke.


Zitat:Hierbei wird jedoch immer ein Exemplar mehr gedruckt als ich angebe.
@Steffl
Ich muss vor dem Druck bestimmte Zellen weiß färben und nach dem Druck wieder gelb.

@Käpt'n Blaubär
Könntest du das mit der Zählschleife noch mal genauer erläutern? Ich verstehe es nicht.
Hallo Martin,

hätte ich früher gewußt, was ich jetzt weiß, ich hätte hier überhaupt nicht geschrieben.
Es ist nicht erkennbar, wo hier eine Abfrage bezüglich der zu druckenden Blattanzahlen passiert

Zitat:Hierbei wird jedoch immer ein Exemplar mehr gedruckt als ich angebe.

wo bitte gibst Du das ein bzw. holst Du die Werte her, damit der Code damit arbeiten kann?
Nun schreibst Du, daß Du auch noch mit Farben rumspielst. Wo bitte passiert denn das?
Jedenfalls nicht in Deinem "Vorzeigemakro".

Hier wie gewünscht ein Beispiel für eine Schleife.
Code:
Option Explicit

Sub EinfacheSchleife()
Dim intI As Integer
   For intI = 1 To Auswahlmenge
'       Deine Druckopionen
   Next intI
End Sub
Hallo Martin,

die Printout-Methode hat einen Parameter Copies

Code:
ActiveWindow.SelectedSheets.PrintOut Copies:=3
Ich würde gerne die Eingabe der Anzahl an Exemplaren aus dem Standard Druckdialog ("Datei/Drucken") übernehmen. Die Krücke mit dem PrintOut Befehl habe ich gewählt, da es meines Wissens keinen AfterPrint-Befehl gibt. Das Färben/Entfärben von Zellenbereichen ist angedeutet durch "AktionVorDruck/AktionNachDruck". Der Parameter Copies ist mir bekannt. Dieser soll ja die eingetragene Anzahl aus dem Standard Dialog ("Datei/Drucken") übernehmen, auf eine extra Abfrage der Exemplare über ein Popup würde ich gerne verzichten. Somit sehe ich zwei Möglichkeiten, das Problem zu lösen (für die ich aber keine Lösung habe):

a) den Wert der Exemplare aus dem Standard Druckdialog übernehmen und als Variable unter dem Parameter Copies in der PrintOut-Methode einfügen
b) eine Art AfterPrint-Befehl

Besten Dank,
Martin
Hallo Martin,

versuche es mal mit einer globalen Variablen.

Code für DieseArbeitsmappe

Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Not bolDruck Then Cancel = True
'Application.EnableEvents = False

AktionVorDruck
'ActiveWindow.SelectedSheets.PrintOut
Application.Dialogs(xlDialogPrint).Show

AktionNachDruck

'Application.EnableEvents = True
End Sub

Code für ein allgemeines Modul

Code:
Option Explicit

Public bolDruck As Boolean

Sub AktionVorDruck()
   'Dein Code
   bolDruck = True
End Sub

Sub AktionNachDruck()
   'Dein Code
   bolDruck = False
End Sub