3

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

Ранее я придумал макрос VBA для переключения разрывов страниц, но он работает только на активном листе:

Sub TogglePageBreaks()

    ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks

End Sub

Следующий логический вопрос (на который мне еще кто-то должен был указать): как использовать макрос для переключения отображения разрывов страниц для всех рабочих листов в активной рабочей книге?

Будучи новичком в VBA, я потратил пару часов, изучая, как перебирать листы, а также как работает объект DisplayPageBreaks. Я придумал ответ ниже.

2 ответа2

5

Вот что я смог придумать. Я успешно проверил это в 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
0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .