Cuando usa varias hojas de trabajo, Chris se pregunta si hay una manera de «bloquear» el desplazamiento a través de todas las hojas de trabajo. Por ejemplo, si se desplaza hacia abajo y hacia abajo en Sheet1 hasta que las filas 100 a 140 y las columnas G a P estén a la vista, cuando cambie a Sheet2 (o cualquier otra hoja de trabajo) le gustaría que se mostraran las mismas filas y columnas en esas hojas de trabajo.

La única forma de realizar esta tarea es mediante el uso de macros. Lo que tiene que suceder es que la macro necesita determinar qué filas y columnas son visibles cuando una hoja está desactivada (quedando) y luego configurar la visualización de la hoja activada (la que está yendo) a las mismas filas y columnas. Las siguientes macros, agregadas al módulo ThisWorkbook, realizan exactamente esta tarea.

Dim grngSelection As Range Dim gintScrollColumn As Integer Dim glngScrollRow As Long

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If TypeName(ActiveSheet) = "Worksheet" Then         On Error Resume Next         With ActiveWindow             Sh.Range(grngSelection.Address).Select             .ScrollColumn = gintScrollColumn             .ScrollRow = glngScrollRow         End With     End If End Sub
Private Sub Workbook_SheetDeactivate(ByVal Sh As Object)

Dim oSheet As Object     If TypeName(Sh) = "Worksheet" Then         Set oSheet = ActiveSheet         Application.EnableEvents = False         Sh.Activate         With ActiveWindow             gintScrollColumn = .ScrollColumn             glngScrollRow = .ScrollRow             Set grngSelection = .RangeSelection         End With         oSheet.Activate         Application.EnableEvents = True     End If End Sub

Tenga en cuenta el uso de las variables fuera de los controladores de eventos. Estas variables se utilizan para pasar los valores de la columna, fila y área seleccionada del controlador SheetDeactivate al controlador SheetActivate.

Por supuesto, es posible que no desee una solución automática. En su lugar, es posible que desee que el usuario realice un paso específico para activar si las hojas de trabajo están sincronizadas. Esto se puede hacer agregando la siguiente macro a un módulo regular en su libro de trabajo:

Global WindowScrollRow Global WindowScrollCol Global WindowSyncOn As Boolean

Public Sub WindowLock()

If Not WindowSyncOn Then         WindowScrollRow = ActiveWindow.VisibleRange.Row         WindowScrollCol = ActiveWindow.VisibleRange.Column         Application.StatusBar = "WindowSync: ON"

Else         Application.StatusBar = ""

End If     WindowSyncOn = Not WindowSyncOn End Sub

Todo lo que hace esta macro es verificar el estado de la variable global WindowSyncOn. Si el valor es Falso, la configuración actual para la fila superior visible y la columna visible más a la izquierda se almacenan en variables globales. La configuración de estas variables es utilizada por el siguiente controlador de eventos, agregado al módulo ThisWorkbook:

Private Sub Workbook_SheetActivate(ByVal Sh As Object)

If WindowSyncOn Then         If Not ActiveWindow Is Nothing Then             ActiveWindow.ScrollRow = WindowScrollRow             ActiveWindow.ScrollColumn = WindowScrollCol         End If     End If End Sub

La macro simplemente verifica la configuración de la variable WindowSyncOn, y si es Verdadero (se ha establecido), entonces la macro establece qué fila y columna están en la parte superior e izquierda de la ventana activa.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (3860) se aplica a Microsoft Excel 97, 2000, 2002 y 2003.