Alles oder nichts drucken (Microsoft Excel)
Karen sucht nach einer Möglichkeit, eine gesamte Arbeitsmappe zu drucken, selbst wenn ein Benutzer ein einzelnes Arbeitsblatt drucken möchte. Mit anderen Worten, sie sucht nach einer Möglichkeit, entweder die gesamte Arbeitsmappe oder gar nichts zu drucken – es sollte keine „dazwischen“ -Optionen geben.
Die einzige Möglichkeit, dies zu handhaben, ist die Verwendung eines Makros. Mit VBA können Sie Makros erstellen, die beim Auftreten bestimmter Ereignisse initiiert werden. Eines der Ereignisse, die Makros auslösen können, ist das Ereignis „Drucken“. Wenn jemand zum Drucken auffordert oder eine Druckvorschau anzeigen möchte, wird das BeforePrint-Ereignis des Arbeitsmappenobjekts ausgelöst. Sie können ein eigenes Makro erstellen, das ausgeführt wird, wenn das Ereignis ausgelöst wird.
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim sht As Variant Dim bPreview As Boolean Dim iResponse As Integer On Error GoTo ErrHandler iResponse = MsgBox(prompt:="Do you want to Print Preview?", _ Buttons:=vbYesNoCancel, Title:="Preview?") Select Case iResponse Case vbYes bPreview = True Case vbNo bPreview = False Case Else GoTo ExitHandler End Select Application.EnableEvents = False For Each sht In Sheets If sht.Visible Then sht.PrintOut Preview:=bPreview End If Next ExitHandler: Application.EnableEvents = True Cancel = True Exit Sub ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
Immer wenn Excel druckbereit ist oder wenn die Druckvorschau aufgerufen wird, wird das BeforePrint-Ereignis ausgelöst und dieses Makro ausgeführt. Das Makro fragt den Benutzer zunächst, ob er eine Druckvorschau erstellen möchte. Eine Select Case-Struktur wird verwendet, um die bPreview-Variable basierend auf der Antwort auf die Frage festzulegen. Die Einstellung von bPreview steuert dann, was passiert.
Wenn der Benutzer bei der Frage nach der Vorschau auf Abbrechen geklickt hat, wird das Makro beendet und der Druckvorgang abgebrochen. Andernfalls wird jedes Arbeitsblatt in der Arbeitsmappe auf Druck oder Vorschau untersucht. Wenn das Arbeitsblatt sichtbar ist, wird es gedruckt und die Preview-Eigenschaft wird auf bPreview gesetzt (True bedeutet, dass das Arbeitsblatt in der Vorschau angezeigt wird; False bedeutet, dass es tatsächlich gedruckt wird).
Beachten Sie, dass das Makro die EnableEvents-Eigenschaft auf False setzt. Dies geschieht, damit beim Drucken oder bei der Vorschau keine anderen Ereignisse ausgelöst werden können.
Wenn EnableEvents aktiviert bleibt, wird jedes Mal, wenn die PrintOut-Methode verwendet wird, das gesamte BeforePrint-Ereignis erneut ausgelöst. Der Benutzer würde in eine Endlosschleife geraten, wenn die Ereignisbehandlung nicht deaktiviert wäre.
Beachten Sie außerdem, dass eines der letzten Ereignisse vor dem Beenden des Makros darin besteht, dass die Eigenschaft Abbrechen auf True festgelegt ist. Dies geschieht, damit der ursprüngliche Druck oder die Druckvorschau-Anforderung, die das BeforePrint-Ereignis generiert hat, abgebrochen wird. Es ist schließlich nicht erforderlich, diese Anforderung abzuschließen, da das Makro die gesamte Druckverarbeitung für den Benutzer durchgeführt hat.
Die Verwendung dieses Druckansatzes hat natürlich eine Einschränkung: Wenn keine Makros aktiviert sind, wird der Handler nicht ausgeführt und der Benutzer kann wie gewünscht drucken. (Wenn Sie beim Öffnen der Arbeitsmappe die Umschalttaste gedrückt halten, werden Makros deaktiviert, und der Benutzer wird meistens gefragt, ob er Makros aktivieren möchte.) Andere Probleme von ExcelTips haben diese Tatsache erörtert.
_Hinweis: _
Wenn Sie wissen möchten, wie die auf dieser Seite (oder auf einer anderen Seite der ExcelTips-Websites) beschriebenen Makros verwendet werden, habe ich eine spezielle Seite vorbereitet, die hilfreiche Informationen enthält.
ExcelTips ist Ihre Quelle für kostengünstige Microsoft Excel-Schulungen.
Dieser Tipp (11629) gilt für Microsoft Excel 2007, 2010, 2013 und 2016.
Eine Version dieses Tipps für die ältere Menüoberfläche von Excel finden Sie hier: Alles oder nichts drucken.