Excel 2010では、ファイル→オプション→詳細→「このワークシートの表示オプション」を使用して、一度に1つのワークシートで改ページをオンまたはオフにすることしかできません。
以前、改ページを切り替えるVBAマクロを思いついたのですが、これはアクティブなシートでのみ機能します。
Sub TogglePageBreaks()
ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks
End Sub
次の論理的な質問(他の誰かが私に指摘しなければならなかった)は、マクロを使用して、allワークシートの改ページ表示を切り替える方法です。アクティブなワークブック?
VBAを初めて使用するので、ワークシートをループする方法と、DisplayPageBreaksオブジェクトがどのように機能するかを調査するために数時間を費やしました。私は以下の答えを思いついた。
これが私が思いついたものです。 Excel 2010でテストに成功しました。VBAは初めてなので、しばらく苦労しました。 DisplayPageBreaks
はアクティブなシートにのみ適用されるため、ws.Activate
がキーでした。 RocketDonkeyの投稿 に感謝します。私が答えに適用した美しくシンプルなトグルコードの概念については、 Rick Rothstein にも感謝します。
Sub ToggleWkBkPageBreaks()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
ActiveSheet.DisplayPageBreaks = True + False - ActiveSheet.DisplayPageBreaks
Next ws
End Sub
これは、例よりも効率的です。
[。また、2013では、改ページを切り替えるためにシートをアクティブ化する必要はありません。
だから...ここに行きます:
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