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":
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.Activate
fue la clave, ya que DisplayPageBreaks
solo 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