Excel 2010 ブック内のすべてのワークシートのページ区切りの表示を簡単に切り替えるにはどうすればよいですか?

Excel 2010 ブック内のすべてのワークシートのページ区切りの表示を簡単に切り替えるにはどうすればよいですか?

Excel 2010では、1つのワークシートに対してのみ改ページをオンまたはオフにすることができます。ファイル → オプション → 詳細設定 → 「このワークシートの表示オプション」:

ここに画像の説明を入力してください

以前、改ページを切り替える VBA マクロを思いつきましたが、アクティブなシートでしか機能しません。

Sub TogglePageBreaks()

    ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks

End Sub

次の論理的な質問(他の誰かが私に指摘しなければならなかった)は、マクロを使用してページ区切りの表示を切り替える方法です。全てアクティブなワークブック内のワークシートですか?

私は VBA 初心者なので、ワークシートをループする方法と DisplayPageBreaks オブジェクトの動作を調べるのに数時間を費やしました。以下の答えにたどり着きました。

答え1

これが私が思いついた方法です。Excel 2010でテストしたところ、うまくいきました。VBAは初心者なので、しばらく苦労しました。 アクティブシートにのみ適用されるws.Activateため、が鍵となります。DisplayPageBreaksRocketDonkey の投稿それを気づかせてくれたことに感謝します。リック・ロススタイン私の回答で適用した、美しくシンプルなトグル コードの概念に感謝します。


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

関連情報