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

3

O Excel 2010 permite apenas ativar ou desativar as quebras de página em uma planilha por vez via Arquivo → Opções → Avançadas → "Opções de exibição para esta Planilha" :

Eu já criei uma macro VBA para alternar as quebras de página, mas ela só funciona na planilha ativa:

Sub TogglePageBreaks()

    ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks

End Sub

A próxima pergunta lógica (que outra pessoa precisou apontar para mim) é como usar uma macro para alternar a exibição de quebras de página para as planilhas todas no ativo pasta de trabalho?

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

    
por AMM 07.06.2013 / 22:11

2 respostas

5

Veja o que eu consegui fazer. Eu testei com sucesso no Excel 2010. Eu sou muito novo no VBA, então eu lutei com isso por um tempo. ws.Activate foi a chave, pois DisplayPageBreaks aplica-se apenas à planilha ativa. Crédito para post do RocketDonkey por me fazer perceber isso. Crédito também para Rick Rothstein para o conceito de código de alternância lindamente simples que eu apliquei na 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
    
por 07.06.2013 / 22:11
0

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

Então ... aqui vai você:

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
    
por 22.09.2016 / 06:41