Excel 2010では、1つのワークシートに対してのみ改ページをオンまたはオフにすることができます。ファイル → オプション → 詳細設定 → 「このワークシートの表示オプション」:
以前、改ページを切り替える VBA マクロを思いつきましたが、アクティブなシートでしか機能しません。
Sub TogglePageBreaks()
ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks
End Sub
次の論理的な質問(他の誰かが私に指摘しなければならなかった)は、マクロを使用してページ区切りの表示を切り替える方法です。全てアクティブなワークブック内のワークシートですか?
私は VBA 初心者なので、ワークシートをループする方法と DisplayPageBreaks オブジェクトの動作を調べるのに数時間を費やしました。以下の答えにたどり着きました。
答え1
これが私が思いついた方法です。Excel 2010でテストしたところ、うまくいきました。VBAは初心者なので、しばらく苦労しました。 アクティブシートにのみ適用されるws.Activate
ため、が鍵となります。DisplayPageBreaks
RocketDonkey の投稿それを気づかせてくれたことに感謝します。リック・ロススタイン私の回答で適用した、美しくシンプルなトグル コードの概念に感謝します。
Sub ToggleWkBkPageBreaks()
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Activate
ActiveSheet.DisplayPageBreaks = True + False - ActiveSheet.DisplayPageBreaks
Next ws
End Sub
答え2
これはあなたの例よりも効率的であるはずです。
画面更新を非アクティブ化することは、ビジュアルを混乱させる操作 (シートのアクティブ化など) を実行する場合の基本的な良い方法です。また、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