Ausführen eines Makros nach Abschluss des Druckvorgangs (Microsoft Excel)
Franklin hat ein Makro, das einige Zeilen in einem Arbeitsblatt verbirgt und dann das Arbeitsblatt druckt. Dazu verwendet er den BeforePrint-Ereignishandler. Das Problem ist, dass Franklin die Zeilen nach Abschluss des Druckvorgangs automatisch einblenden möchte. Er weiß nicht, wie er das in seinem Makro machen soll.
Es gibt einige Möglichkeiten, wie Sie dies angehen können. Eine besteht darin, den BeforePrint-Ereignishandler zu verwenden und damit die gewünschten Zeilen auszublenden und dann ein Makro anzugeben, das über die OnTime-Methode ausgeführt werden soll. So würde der Ereignishandler aussehen:
Private Sub Workbook_BeforePrint(Cancel As Boolean) ' Code here to hide rows desired Application.OnTime Now, "AfterPrint" End Sub
Sie müssen diesem Ereignishandler den Code hinzufügen, um die Zeilen auszublenden, die ausgeblendet werden sollen. (Franklin sagte, dass ein solcher Code funktioniert; er wurde nach dem Drucken ausgeblendet, mit dem er Probleme hatte.) Beachten Sie, dass das Makro, das über OnTime aufgerufen wird, AfterPrint heißt. Dieses Makro sollte in einem regulären Modul platziert werden, nicht in demselben Modul wie die Ereignishandler. Es kann sogar einfacher sein als der Ereignishandler:
Sub AfterPrint() ' Code here to unhide rows Cells.Select Selection.EntireRow.Hidden = False End Sub
Auf Wunsch können Sie auch die Notwendigkeit der OnTime-Methode (und des AfterPrint-Makros) vollständig umgehen. Dies würde diesen Ansatz beinhalten:
Private Sub Workbook_BeforePrint(Cancel As Boolean) Cancel = True ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
Das Makro funktioniert, weil es den Druck abbricht, der das BeforePrint-Ereignis ausgelöst hat, die Zeilen ausblendet, das aktive Arbeitsblatt druckt und dann die Zeilen einblendet.
Der Nachteil eines solchen Event-Handler-basierten Ansatzes besteht darin, dass er die Druckmöglichkeiten des Benutzers einschränkt. Mit anderen Worten, der Benutzer kann nur das drucken, was Sie ihm zum Drucken erlauben, nicht das, was er möglicherweise tatsächlich drucken möchte. Um diese ziemlich große Einschränkung zu umgehen, müssen Sie den BeforePrint-Ansatz vollständig aufgeben. Erstellen Sie stattdessen ein reguläres Makro, das den Druckvorgang übernimmt:
Sub PrintWS() ' Code here to hide rows desired Application.EnableEvents = False ActiveSheet.PrintOut Application.EnableEvents = True ' Code here to unhide rows End Sub
Sie werden feststellen, dass dies im Wesentlichen der Mut des zweiten BeforePrint-Ansatzes ist: Sie blenden Zeilen aus, drucken das Arbeitsblatt und blenden die Zeilen dann aus. Dieses PrintWS-Makro kann dann an eine Tastenkombination oder etwas in der Symbolleiste für den Schnellzugriff gebunden werden, sodass es einfach aufgerufen werden kann.
Übrigens, wenn Sie sich für einen der BeforePrint-Ansätze entscheiden, wurde berichtet, dass er nicht in allen Excel-Versionen ordnungsgemäß funktioniert. (Dies scheint sehr schwer zu finden zu sein.) In einigen Versionen wird das, was Excel druckt, „in Stein gemeißelt“, bevor der BeforePrint-Ereignishandler aufgerufen wird. Dies bedeutet, dass alle Zeilen, die Sie im Ereignishandler ausblenden, ignoriert werden, wenn das Arbeitsblatt tatsächlich gedruckt wird. Es ist also so, als hätten Sie die Zeilen im Makro nie versteckt. Der einzige Weg, um diese sehr frustrierende Tatsache zu umgehen, besteht darin, den Druck direkt selbst durchzuführen, entweder über das zweite obige BeforePrint-Beispiel oder den PrintWS-Makroansatz.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (13624) gilt für Microsoft Excel 2007, 2010, 2013, 2016, 2019 und Excel in Office 365.