Tim tiene algunas hojas de trabajo que tienen dos secciones separadas (llamémoslas secciones superior e inferior) que tienen encabezados de columna ligeramente diferentes. Ha congelado la fila superior para mantener visibles los encabezados de la sección superior mientras se desplaza hacia abajo, pero después de desplazarse más allá de cierto punto, Tim termina mirando los datos de la sección inferior con los encabezados de la sección superior todavía en la parte superior. Le gustaría saber si hay una manera de cambiar esa fila de encabezado congelada para mostrar los encabezados de la sección inferior cuando se desplaza hacia abajo hasta el punto en que solo se muestran los datos de la sección inferior.

Sí, hay una forma de hacer esto, pero implica el uso de macros.

Antes de considerar una solución basada en macros, es posible que desee considerar reestructurar sus datos para que cada una de sus secciones esté en hojas de trabajo diferentes. (Desde una perspectiva de diseño, esta sería la solución más fácil). Si esto no es posible, entonces debe estar mirando macros.

Un enfoque sencillo es simplemente cambiar lo que está almacenado en la fila superior (fila 1) de su hoja de trabajo, dependiendo de la fila seleccionada. Por ejemplo, la siguiente macro realizará cambios en la fila superior según la ubicación de la celda activa. Si está antes de la fila 40, entonces se rellena un conjunto de encabezados en la primera fila; si después de la fila 40, se rellena otro conjunto de encabezados.

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim iBottomData As Integer

iBottomData = 40

If ActiveCell.Row < iBottomData Then         Cells(1, 1).Value = "Last Name"

Cells(1, 2).Value = "First Name"

Cells(1, 3).Value = "Address"

Cells(1, 4).Value = "Balance"

Else         Cells(1, 1).Value = "Account"

Cells(1, 2).Value = "Sales Rep"

Cells(1, 3).Value = "Status"

Cells(1, 4).Value = ""

End If End Sub

Para usar la macro, solo asegúrese de colocarla en la ventana de código de la hoja de trabajo que contiene las dos secciones de datos. También debe cambiar el valor asignado a la variable iBottomData para reflejar el número de fila de donde comienza la sección de datos inferior.

Si realmente desea cambiar la fila congelada a medida que avanza en la hoja de trabajo, entonces la macro debe ser un poco más sólida. En realidad, hay dos macros que siguen (ambas van, nuevamente, en la ventana de código de la hoja de trabajo), y se activan a medida que cambia la celda seleccionada y cuando hace clic con el botón derecho en la hoja de trabajo.

Private Sub Worksheet_BeforeRightClick(ByVal _   Target As Range, Cancel As Boolean)

Application.ScreenUpdating = False     ActiveWindow.FreezePanes = False     ActiveWindow.Split = False     Application.EnableEvents = False     Application.Goto Cells(1, 1), scroll:=True     With ActiveWindow         .SplitColumn = 0         .SplitRow = 1     End With     ActiveWindow.FreezePanes = True     Application.Goto Cells(Target.Row - 1, _       Target.Column), scroll:=True     Application.EnableEvents = True     On Error Resume Next        'MUST reenable events     Application.EnableEvents = False     ActiveCell.Offset(-1, 1 - Target.Column).Select     ' so the right click menu doesn't popup     ' only if this is the second header row.

Cancel = True      Application.EnableEvents = True End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Application.ScreenUpdating = False     If Cells(Target.Row, 1).Value <> "title2" Then Exit Sub     ActiveWindow.FreezePanes = False     ActiveWindow.Split = False     Application.Goto Cells(Target.Row, 1), scroll:=True     With ActiveWindow         .SplitColumn = 0         .SplitRow = 1     End With     ActiveWindow.FreezePanes = True     On Error Resume Next        'MUST reenable events     Application.EnableEvents = False     ActiveCell.Offset(1, 1 - Target.Column).Select     Application.EnableEvents = True End Sub

El controlador de eventos Worksheet_SelectionChange mueve automáticamente la división congelada debajo de la segunda fila de encabezados cuando el cursor de la celda activa llega a esa línea. Esta línea se detecta en la instrucción If que comprueba si la primera celda de la fila contiene el texto «título2» o no.

(Obviamente, esto debería cambiarse para reflejar lo que realmente habrá en esa primera celda.)

El controlador de eventos Worksheet_BeforeRightClick mueve la división congelada de regreso al primer conjunto de encabezados pero deja la celda activa en la fila sobre el segundo conjunto de encabezados.

Debe comprender que las dos soluciones macro presentadas en este consejo asumen que en realidad se desplaza por la hoja de trabajo y cambia la celda seleccionada a medida que avanza. (En otras palabras, está presionando la tecla de flecha hacia abajo para desplazarse). Si simplemente está cambiando lo que se muestra en la hoja de trabajo usando la barra de desplazamiento vertical, entonces los encabezados congelados no cambiarán porque no está cambiando el celda seleccionada y los controladores de eventos nunca se activan.

La creación de una solución más amplia estaría más allá del alcance de este consejo porque implicaría interactuar con el sistema operativo real.

Sin embargo, si está interesado en seguir esta ruta, un buen punto de partida podría ser esta página en el sitio web de Chip Pearson:

http://www.cpearson.com/excel/DetectScroll.htm

_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 (11231) se aplica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 y Excel en Office 365. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Excel aquí:

link: / excel-Switching_Headers_in_a_Frozen_Row [Cambio de encabezados en una fila congelada].