Registriert seit: 04.05.2015
Version(en): 2013
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
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Martin,
wozu benötigst Du das Before-Print-Ereignis?
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
03.09.2015, 21:58
(Dieser Beitrag wurde zuletzt bearbeitet: 03.09.2015, 22:01 von Käpt'n Blaubär.)
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.
Registriert seit: 04.05.2015
Version(en): 2013
@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.
Registriert seit: 11.04.2014
Version(en): '97 bis 2016; 365
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
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo Martin,
die Printout-Methode hat einen Parameter Copies
Code:
ActiveWindow.SelectedSheets.PrintOut Copies:=3
Gruß Stefan
Win 10 / Office 2016
Registriert seit: 04.05.2015
Version(en): 2013
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
Registriert seit: 11.04.2014
Version(en): Office 2007
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
Gruß Stefan
Win 10 / Office 2016