¿Cómo puedo alternar fácilmente la visualización de saltos de página para todas las hojas de trabajo en un libro de Excel 2010?

¿Cómo puedo alternar fácilmente la visualización de saltos de página para todas las hojas de trabajo en un libro de Excel 2010?

Excel 2010 solo permite activar o desactivar saltos de página para una hoja de cálculo a la vez a través deArchivo → Opciones → Avanzado → "Opciones de visualización para esta hoja de trabajo":

ingrese la descripción de la imagen aquí

Anteriormente se me ocurrió una macro de VBA para alternar saltos de página, pero solo funciona en la hoja que tengo activa:

Sub TogglePageBreaks()

    ActiveSheet.DisplayPageBreaks = Not ActiveSheet.DisplayPageBreaks

End Sub

La siguiente pregunta lógica (que alguien más tuvo que señalarme) es ¿cómo uso una macro para alternar la visualización de saltos de página?todohojas de trabajo en el libro de trabajo activo?

Como soy nuevo en VBA, pasé un par de horas investigando cómo recorrer las hojas de trabajo y también cómo funciona el objeto DisplayPageBreaks. Se me ocurrió una respuesta a continuación.

Respuesta1

Esto es lo que se me ocurrió. Lo probé con éxito en Excel 2010. Soy muy nuevo en VBA, así que tuve problemas con esto por un tiempo. ws.Activatefue la clave, ya que DisplayPageBreakssolo aplica a la hoja activa. Crédito aLa publicación de RocketDonkeypor hacerme darme cuenta de eso. Crédito también aRick Rothsteinpor el concepto de código de alternancia maravillosamente simple que apliqué en mi respuesta.


Sub ToggleWkBkPageBreaks()

    Dim ws As Worksheet

    For Each ws In ActiveWorkbook.Worksheets

        ws.Activate

        ActiveSheet.DisplayPageBreaks = True + False - ActiveSheet.DisplayPageBreaks

    Next ws

End Sub

Respuesta2

Esto debería ser más eficiente que su ejemplo.
Desactivar la actualización de pantalla es una buena práctica básica cuando se hacen cosas que alteran los elementos visuales (como activar hojas). Además, 2013 no requiere activación de hoja para alternar saltos de página.

Entonces... aquí tienes:

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

información relacionada