varias una sola plantillas llama hojas hoja desagrupar datos cómo cálculo consolidar conjunto concatenar como calculo agrupar excel vba excel-vba ms-office

sola - cómo desagrupar una hoja de excel



¿Cómo puedo congelar programáticamente la fila superior de una hoja de cálculo de Excel en Excel 2007 VBA? (6)

El problema con la macro grabada es el mismo que el problema con la acción incorporada: Excel elige congelar la fila visible superior, en lugar de la fila superior real donde se puede encontrar la información del encabezado.

El objetivo de una macro en este caso es congelar la fila superior real. Cuando estoy viendo la fila # 405592 y necesito verificar el encabezado de la columna (porque olvidé congelar filas cuando abrí el archivo), tengo que desplazarme hacia la parte superior, congelar la fila superior, luego encontrar el camino de regreso a fila # 405592 nuevamente. Como creo que esto es un comportamiento estúpido, quiero una macro para corregirlo, pero, como dije, la macro grabada simplemente imita el mismo comportamiento estúpido.

Estoy usando Office 2011 para Mac OS X Lion

Actualización (2 minutos después):

Encontré una solución aquí: http://www.ozgrid.com/forum/showthread.php?t=19692

Dim r As Range Set r = ActiveCell Range("A2").Select With ActiveWindow .FreezePanes = False .ScrollRow = 1 .ScrollColumn = 1 .FreezePanes = True .ScrollRow = r.Row End With r.Select

Estoy buscando congelar programáticamente la fila superior de una hoja de cálculo de Excel de VBA. El objetivo final es producir el mismo efecto que el comando View > Freeze Panes > Freeze Top Row en Excel 2007 para que la fila superior de la hoja de trabajo esté congelada y los usuarios puedan ver la fila superior de la hoja de trabajo incluso mientras se desplazan por los datos .


Para expandir esta pregunta al ámbito de uso fuera del propio VBA de Excel, la propiedad ActiveWindow debe direccionarse como elemento secundario del objeto Excel.Application .

Ejemplo para crear un libro de Excel desde Access:

El uso del objeto Excel.Application en el proyecto VBA de otra aplicación de Office requerirá que agregue la biblioteca de objetos de Microsoft Excel 15.0 (o equivalente para su propia versión).

Option Explicit Sub xls_Build__Report() Dim xlApp As Excel.Application, ws As Worksheet, wb As Workbook Dim fn As String Set xlApp = CreateObject("Excel.Application") xlApp.DisplayAlerts = False xlApp.Visible = True Set wb = xlApp.Workbooks.Add With wb .Sheets(1).Name = "Report" With .Sheets("Report") ''report generation here End With ''This is where the Freeze Pane is dealt with ''Freezes top row With xlApp.ActiveWindow .SplitColumn = 0 .SplitRow = 1 .FreezePanes = True End With fn = CurrentProject.Path & "/Reports/Report_" & Format(Date, "yyyymmdd") & ".xlsx" If CBool(Len(Dir(fn, vbNormal))) Then Kill fn .SaveAs FileName:=fn, FileFormat:=xlOpenXMLWorkbook End With Close_and_Quit: wb.Close False xlApp.Quit End Sub

El proceso central es en realidad solo una reiteración de las respuestas enviadas previamente, pero pensé que era importante demostrar cómo lidiar con ActiveWindow cuando no está dentro del propio VBA de Excel. Si bien el código aquí es VBA, debe ser directamente transcribible a otros idiomas y plataformas.


Solo haga clic en el mismo problema ... Por alguna razón, el comando freezepanes acaba de causar que las crucetas aparezcan en el centro de la pantalla. ¡Resulta que apagué ScreenUpdating! Resuelto con el siguiente código:

Application.ScreenUpdating = True Cells(2, 1).Select ActiveWindow.FreezePanes = True

Ahora funciona bien.


Tomalak ya le dio una respuesta correcta, pero me gustaría agregar que la mayoría de las veces cuando desea conocer el código VBA necesario para realizar una determinada acción en la interfaz de usuario, es una buena idea grabar una macro.

En este caso, haga clic en Grabar macro en la pestaña del desarrollador de la cinta de opciones, congele la fila superior y luego detenga la grabación. Excel tendrá grabada la siguiente macro para usted, que también hace el trabajo:

With ActiveWindow .SplitColumn = 0 .SplitRow = 1 End With ActiveWindow.FreezePanes = True


Rows("2:2").Select ActiveWindow.FreezePanes = True

Esta es la forma más fácil de congelar la fila superior. La regla para FreezePanes es que congelará la esquina superior izquierda de la celda que seleccionó. Por ejemplo, si resalta C10, se congelará entre las columnas B y C, filas 9 y 10. Por lo tanto, cuando resalta la Fila 2, en realidad se congela entre las Filas 1 y 2, que es la fila superior.

Además, .SplitColumn o .SplitRow dividirán tu ventana una vez que la descongeles, que no es la que más me gusta.


Rows("2:2").Select ActiveWindow.FreezePanes = True

Seleccione un rango diferente para un efecto diferente, de la misma manera que lo haría manualmente. El "Freeze Top Row" realmente solo es un acceso directo nuevo en Excel 2007 (y versiones posteriores), no contiene ninguna funcionalidad adicional en comparación con las versiones anteriores de Excel.