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