Excel 2010 erlaubt das Ein- und Ausschalten von Seitenumbrüchen nur für jeweils ein Arbeitsblatt überDatei → Optionen → Erweitert → „Anzeigeoptionen für dieses Arbeitsblatt“:
Ich habe mir zuvor ein VBA-Makro zum Umschalten von Seitenumbrüchen ausgedacht, aber es funktioniert nur auf dem Blatt, das ich aktiv habe:
Sub TogglePageBreaks()
ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks
End Sub
Die nächste logische Frage (die mir jemand anderes stellen musste) ist, wie ich ein Makro verwende, um die Anzeige von Seitenumbrüchen umzuschalten füralleArbeitsblätter in der aktiven Arbeitsmappe?
Da ich neu bei VBA bin, habe ich ein paar Stunden damit verbracht, zu recherchieren, wie man durch Arbeitsblätter schleift und wie das DisplayPageBreaks-Objekt funktioniert. Die folgende Antwort habe ich gefunden.
Antwort1
Hier ist, was ich mir ausgedacht habe. Ich habe es erfolgreich in Excel 2010 getestet. Ich bin ein Neuling in VBA, also hatte ich eine Weile Probleme damit. ws.Activate
war der Schlüssel, da DisplayPageBreaks
es nur auf das aktive Blatt angewendet wird. Dank anBeitrag von RocketDonkeydafür, dass ich das erkannt habe. Dank auch anRick Rothsteinfür das wunderbar einfache Umschaltcode-Konzept, das ich in meiner Antwort angewendet habe.
Sub ToggleWkBkPageBreaks()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
ActiveSheet.DisplayPageBreaks = True + False - ActiveSheet.DisplayPageBreaks
Next ws
End Sub
Antwort2
Dies sollte effizienter sein als Ihr Beispiel.
Das Deaktivieren der Bildschirmaktualisierung ist eine grundlegende bewährte Vorgehensweise, wenn Sie Dinge tun, die die visuellen Elemente beeinträchtigen (z. B. das Aktivieren von Blättern). Außerdem ist in 2013 keine Blattaktivierung erforderlich, um Seitenumbrüche umzuschalten.
Also... hier bitte:
Sub ToggleWkBkPageBreaks() ' start of public sub (private sub and function would not appear in macro menu in excel, would only be accessible to the code in the module)
'Declaring variables
Dim ws As Worksheet 'worksheet object
Dim is2010OrLess As Boolean 'true or false variable (= type 'boolean')
is2010OrLess = cint(Application.Version) > 15 ' check version (version "15.0" = excel 2013)
Application.ScreenUpdating = False ' disable screen updating
'do operations with ScreenUpdating turned off
For Each ws In ThisWorkbook.Worksheets ' loop start (for each type, based on the sheet collection, hence the need for the ws object for the loop)
If is2010OrLess = True then ws.Activate ' if version is less than exce3l2013, activate sheet. Else, don't activate the sheet (because it's unnecessary).
ws.DisplayPageBreaks = not ws.DisplayPageBreaks ' .dysplayPagebreaks yelds a true or false so, we change it to ('=') the inverse (not true/not false)
Next ws ' next sheet
Application.ScreenUpdating = True ' Re-enable screen updating
End Sub