2012-06-29 23 views
6

tengo una hoja de Excel con los datos en el siguiente formato:paneles de congelación dinámica en Excel

Title 
Summary A 
A info 1 
A info 2 
A info 3 
Summary B 
B info 1 
B info 2 
Summary C 

por lo que ahora sólo tengo "título" como un panel inmovilizado en Excel. Funciona bien y todo, pero hay una gran cantidad de datos, así que cuando estás en el medio de la hoja es difícil saber si estás trabajando en summary A o summary B.

¿Alguien sabe cómo congelar paneles dinámicamente? es decir, inicialmente title y Summary A se congelarán. Luego, a medida que el usuario se desplaza hacia abajo hasta la siguiente sección, se congelarán Title y Summary B, y así sucesivamente.

+0

En lugar de congelar dinámicamente diferentes partes de la hoja (lo que puede ser un poco desconcertante para los usuarios), puede mantener las primeras filas corregidas, luego tener un controlador de eventos para atrapar selectionchange y actualizar una celda en la fila superior con el título Resumen actual (suponiendo que hay alguna forma de detectarlos) –

Respuesta

3

Puede probar esto (en el módulo de código de la hoja de trabajo). Cada vez que cambia la selección, marca hacia arriba en la primera columna el contenido como "Resumen *": si la hoja de cálculo no está congelada en esa fila, realizará ese ajuste.

Una dificultad es que para desplazarse hacia arriba tiene que hacer clic en una de las filas en el panel superior ...

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 

    Static lastFreeze As Long 
    Dim c As Range, r As Long, sel As Range 

    Set sel = Selection 
    'get the first cell on the selected row, then 
    ' go up until find a content like "Summary*" 
    Set c = Target.Parent.Cells(Target.Cells(1).Row, 1) 
    Do While (Not c.Value Like "Summary*") And c.Row > 1 
     Set c = c.Offset(-1, 0) 
    Loop 

    'need to switch freeze location? 
    If c.Row > 1 And c.Row <> lastFreeze Then 
     ActiveWindow.FreezePanes = False 
     'prevent re-triggering event 
     Application.EnableEvents = False 
     Application.GoTo c.Offset(-1, 0), True 
     c.Offset(1, 0).Select 
     ActiveWindow.FreezePanes = True 
     sel.Select 
     Application.EnableEvents = True 
     lastFreeze = c.Row 
    End If 

End Sub 
+0

Estoy de acuerdo, como @Ted Williams señala, la dificultad de desplazarse al otro rango podría hacer que esto no sea tan útil, pero es la respuesta . ¿Qué pasa con el formateo de A y B como diferentes colores, por lo que es fácilmente evidente? – datatoo

Cuestiones relacionadas