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, de modo 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.¿Cómo puedo congelar programáticamente la fila superior de una hoja de cálculo de Excel en Excel 2007 VBA?
Respuesta
Rows("2:2").Select
ActiveWindow.FreezePanes = True
Seleccione un rango diferente para un efecto diferente, de forma muy similar a como 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.
Tomalak ya le dio una respuesta correcta, pero me gustaría agregar que la mayoría de las veces cuando le gustaría saber el código VBA necesario para realizar una determinada acción en la interfaz de usuario, es una buena idea grabar un 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á la siguiente macro grabada para usted que también hace el trabajo:
With ActiveWindow
.SplitColumn = 0
.SplitRow = 1
End With
ActiveWindow.FreezePanes = True
Sí. Esta es la respuesta correcta. No es necesario seleccionar ninguna parte de la hoja de trabajo. – HuckIt
Buena respuesta, pero tengo curiosidad por saber por qué la última afirmación no estaba metida en la declaración Con ... Fin Con. – Jeeped
@Jeeped: Esta es solo la salida sin formato de la grabadora de macros de Excel. Por supuesto, puede incluir la línea en el bloque 'With'. –
El problema con la macro grabada es el mismo que el problema con la acción integrada: Excel elige para congelar la parte superior visibles fila, 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
Update (2 minutos más tarde):
he encontrado 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
Para cualquier otro novato como yo: pude congelar las 8 filas superiores (donde reside mi "tablero de informes") haciendo el Rango ("A9") sin cambiar nada más. – Sean
simplemente pulse el mismo problema .. Por alguna razón, el comando freezepanes acaba de provocar que las referencias cruzadas aparezcan en el centro de la pantalla. ¡Resulta que apagué ScreenUpdating! resuelve con el siguiente código:
Application.ScreenUpdating = True
Cells(2, 1).Select
ActiveWindow.FreezePanes = True
ahora funciona bien.
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á el 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 su ventana una vez que la descongele, que no es la que yo prefiero.
Para ampliar esta cuestión en el ámbito de utilización fuera de Excel VBA s propia, la ActiveWindow property debe abordarse como un hijo de la Excel.Application object.
Ejemplo para la creación de un libro de Excel desde Access:
Utilizando el Excel.Application object en el proyecto de VBA de otra aplicación de Office será necesario que añadir 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 básico es en realidad sólo una reiteración de las respuestas presentadas anteriormente, pero pensé que era importante demostrar cómo tratar con ActiveWindow cuando no está dentro de la propia VBA de Excel. Si bien el código aquí es VBA, debe ser directamente transcribible a otros idiomas y plataformas.
También podría usar 'Establecer xlApp = New Excel.Application', o incluso' Dim xlApp As New Excel.Application'. –
- 1. Extraer VBA de una hoja de cálculo de Excel
- 2. Ocultar una hoja de cálculo de Excel con VBA
- 3. VBA cambia Excel 2002 -> Excel 2007
- 4. Importación de datos de hoja de cálculo de Excel a otra hoja de cálculo de Excel que contiene VBA
- 5. Hoja de cálculo de Excel de Excel utilizando EPPlus
- 6. Copie una hoja de cálculo completa en una nueva hoja de cálculo en Excel 2010
- 7. Buscar la parte inferior de la hoja de cálculo de Excel en VBA
- 8. Escritura de VBA en Excel 2007 para su uso en Excel 2003
- 9. Excel (2007) VBA - .Fórmula con comillas en él
- 10. Abrir archivo de Excel en una hoja de cálculo específica
- 11. Lectura de una hoja de cálculo de Excel 2007 en C#
- 12. llamando a la función de hoja de cálculo excel desde la celda excel
- 13. Eliminación de imágenes con Excel VBA
- 14. C# lea la hoja de cálculo de Excel
- 15. Cómo cambio el nombre de la hoja de C# en una hoja de cálculo de Excel
- 16. ¿Almacenar objetos en la hoja de cálculo de Excel?
- 17. usando C# para seleccionar una hoja de cálculo en Excel
- 18. Creando y nombrando hojas de cálculo en Excel VBA
- 19. Crear una función de hoja personalizada en Excel VBA
- 20. Última celda no vacía en la fila; Excel VBA
- 21. Extrae datos de una hoja de cálculo Excel
- 22. hoja de cálculo de Excel de consulta en MS-Access VBA (utilizando conjunto de registros ADODB)
- 23. ruby excel reader, gema de la hoja de cálculo
- 24. ¿Cómo elimino todo debajo de la fila X en VBA/Excel?
- 25. NullReferenceException al crear la hoja de cálculo de Excel
- 26. Abrir hoja de cálculo xml en Excel de forma predeterminada
- 27. ¿Se puede declarar un objeto de hoja de cálculo globalmente en Excel VBA?
- 28. Límite de tamaño de matriz VBA de Excel 2007
- 29. Cómo acceder a Checkbox desde VBA en Excel 2007
- 30. ¿Cómo puedo escribir en una hoja de cálculo de Excel usando Linq?
Parece que la función de actualización de pantalla debe estar activada para que funcione, pero por lo demás es excelente. ¡Gracias! –
No tengo claro cómo congelar la fila superior seleccionando la fila superior. Para congelar la fila superior, la selección debe ser 'Filas (2)' o 'Filas (" 2: 2 ")'. Seleccionar 'Fila (" 1: 1 ")' da como resultado una división de cuatro cuadrantes de la hoja de trabajo. – Jeeped
@Jeeped m) - ¡por supuesto! Buen hallazgo, gracias! – Tomalak