Como posso alternar facilmente a exibição de quebras de página para todas as planilhas de uma pasta de trabalho do Excel 2010?

Como posso alternar facilmente a exibição de quebras de página para todas as planilhas de uma pasta de trabalho do Excel 2010?

O Excel 2010 só permite ativar ou desativar quebras de página para uma planilha por vez viaArquivo → Opções → Avançado → "Exibir opções para esta planilha":

insira a descrição da imagem aqui

Anteriormente, criei uma macro VBA para alternar quebras de página, mas ela só funciona na planilha que tenho ativa:

Sub TogglePageBreaks()

    ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks

End Sub

A próxima questão lógica (que alguém me apontou) é como faço para usar uma macro para alternar a exibição de quebras de página paratodosplanilhas na pasta de trabalho ativa?

Sendo novo no VBA, passei algumas horas pesquisando como percorrer planilhas e também como funciona o objeto DisplayPageBreaks. Eu encontrei uma resposta abaixo.

Responder1

Aqui está o que consegui descobrir. Testei-o com sucesso no Excel 2010. Sou muito novo no VBA, então lutei com isso por um tempo. ws.Activatefoi a chave, pois DisplayPageBreaksse aplica apenas à planilha ativa. Crédito paraPostagem de RocketDonkeypor me fazer perceber isso. Crédito também paraRick Rothsteinpara o conceito de código de alternância lindamente simples que apliquei em minha resposta.


Sub ToggleWkBkPageBreaks()

    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets

        ws.Activate

        ActiveSheet.DisplayPageBreaks = True + False - ActiveSheet.DisplayPageBreaks

    Next ws

End Sub

Responder2

Isso deve ser mais eficiente que o seu exemplo.
Desativar a atualização de tela é uma boa prática básica ao fazer coisas que atrapalham o visual (como ativar planilhas). Além disso, 2013 não requer ativação de planilha para alternar quebras de página.

Então... aqui está:

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

informação relacionada