web-dev-qa-db-ja.com

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

Excel 2010では、ファイル→オプション→詳細→「このワークシートの表示オプション」を使用して、一度に1つのワークシートで改ページをオンまたはオフにすることしかできません。

enter image description here

以前、改ページを切り替えるVBAマクロを思いついたのですが、これはアクティブなシートでのみ機能します。

Sub TogglePageBreaks()

    ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks

End Sub

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

VBAを初めて使用するので、ワークシートをループする方法と、DisplayPageBreaksオブジェクトがどのように機能するかを調査するために数時間を費やしました。私は以下の答えを思いついた。

3
AMM

これが私が思いついたものです。 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
5
AMM

これは、例よりも効率的です。
[。また、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
0
jony