Как можно легко включить или отключить отображение разрывов страниц для всех листов в книге Excel 2010?

Как можно легко включить или отключить отображение разрывов страниц для всех листов в книге Excel 2010?

Excel 2010 позволяет включать и отключать разрывы страниц только для одного листа за раз с помощьюФайл → Параметры → Дополнительно → «Отобразить параметры для этого рабочего листа»:

введите описание изображения здесь

Ранее я придумал макрос 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

Это должно быть эффективнее, чем ваш пример.
Деактивация screenupdating — это базовая хорошая практика при выполнении действий, которые портят визуальные эффекты (например, активация листов). Также 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

Связанный контент