Me gustaría repasar uno de los objetos de Excel menos conocidos pero más amplios: el objeto Application.
Sobre este objeto Application podemos trabajar con multitud de eventos, métodos y propiedades.
Son tantos que he optado por mostrar un corta de lista de los más frecuentes.
Comenzaré por algunos de los métodos más interesantes (a mi elección):
1- Application.Calculate: que permite forzar el recálculo del libro completo, una hoja o un rango específico.
Otro método:
2- Application.Evaluate: de manera similar a INDIRECTO convierte un nombre o texto que siga la convención de nomenclatura de Excel (la longitud del nombre debe ser menor o igual a 255 caracteres) en un objeto o un valor...
Importante!: El uso de corchetes (por ejemplo, "[A1:D13]") equivale a llamar al método Evaluate con un argumento de cadena. Por ejemplo, son equivalentes:
Otro método más:
2- Application.Quit: sale y cierra la aplicación Excel (no únicamente los libros de trabajo).
Si hubiera algún libro abierto, Excel mostrará un cuadro de diálogo para preguntarnos si queremos guardar los cambios... igual que si cerráramos manualmente la aplicación.
Otro método más:
2- Application.Union: para componer rangos a partir de otros ya existentes
Pasaremos a continuación a recorrer algunas propiedades interesantes.
1- Application.Calculation: que permite modificar la opción de cálculo (Automático, Manual o Automático excepto tablas de datos).
2- Application.CalculateBeforeSave: indicaremos True para que los libros se calculen antes de guardarlos en el disco
OJO:si la propiedad Calculation se establece como xlManual.
3- Application.CalculateBeforeSave: indicamos cuál es la tecla habilitada para interrumpir el recálculo de nuestras fórmulas (xlAnyKey, xlNoKey o xlEscKey).
4- Application.Caption: Devuelve o establece un valor String que representa el nombre que aparece en la barra de título de la ventana principal de Microsoft Excel (es la parte superior de Excel... donde encontramos el nombre del libro de trabajo).
Por defecto, si no establecemos un nombre o si se establece el nombre en blanco (Application.Caption = "") , esta propiedad devuelve el texto "Excel".)
Otra propiedad curiosa:
5- Application.Cursor: Cambia la tipología del icono del cursor entre:
xlDefault-El puntero predeterminado.
xlIBeam-El puntero en i.
xlNorthwestArrow-El puntero flecha noroeste.
xlWait-El puntero reloj de arena.
La propiedad Cursor no se restablecerá automáticamente cuando la macro termine de ejecutarse.
Debereremos restablecer el puntero xlDefault antes de que la macro detiene su ejecución.
6- Application.DecimalSeparator: para configurar los separadores decimales o de miles de nuestro libro...
7- Application.DisplayAlerts: daremos valor True para que Excel muestra ciertos mensajes y avisos mientras se ejecuta una macro; y False para suprimir los mensajes y los mensajes de alerta mientras se ejecuta una macro. Cuando un mensaje requiere una respuesta, Microsoft Excel elige la respuesta predeterminada.
8- Application.Caption: valor True si los eventos están habilitados para el objeto especificado.
Asociado normalmente a eventos de nuestra hoja de cálculo o objetos ActiveX
OJO por que no es funcional para eventos dentro de un userForm!!
9- Application.ScreenUpdating: True si está activada la actualización/refresco de la pantalla.
Acelera la ejecución de las macros...
Recomendable finalizar nuestra macro dando valor False.
Y la última propiedad a comentar (por no eternizar la lista):
10- Application.Visible: True o False para determinar si el objeto (nuestra aplicación) está o no visible a ojos del usuario...
Por supuesto hay muchos más.. y te invito a investigar
;-)
Sobre este objeto Application podemos trabajar con multitud de eventos, métodos y propiedades.
Son tantos que he optado por mostrar un corta de lista de los más frecuentes.
Comenzaré por algunos de los métodos más interesantes (a mi elección):
1- Application.Calculate: que permite forzar el recálculo del libro completo, una hoja o un rango específico.
'Todos los libros abiertos Application.Calculate 'o sencillamente Calculate 'Una hoja de cálculo determinada Worksheets(1).Calculate 'Un rango específico Worksheets(1).Range("A1:E10").Calculate
Otro método:
2- Application.Evaluate: de manera similar a INDIRECTO convierte un nombre o texto que siga la convención de nomenclatura de Excel (la longitud del nombre debe ser menor o igual a 255 caracteres) en un objeto o un valor...
Importante!: El uso de corchetes (por ejemplo, "[A1:D13]") equivale a llamar al método Evaluate con un argumento de cadena. Por ejemplo, son equivalentes:
[A13].Value = 1313 Evaluate("A13").Value = 1313 Vble = [COS(90)] Vble = Evaluate("COS(90)") Set celda = Workbooks("Libro1.xlsm").Sheets(1).[A1] Set celda = Workbooks("Libro1.xlsm").Sheets(1).Evaluate("A1")
Otro método más:
2- Application.Quit: sale y cierra la aplicación Excel (no únicamente los libros de trabajo).
Si hubiera algún libro abierto, Excel mostrará un cuadro de diálogo para preguntarnos si queremos guardar los cambios... igual que si cerráramos manualmente la aplicación.
Application.Quit
Otro método más:
2- Application.Union: para componer rangos a partir de otros ya existentes
Set RangoUnion = Application.Union(Range("A1:A13"), Range("C1:C13")) RangoUnion.Formula = "Excelforo"
Pasaremos a continuación a recorrer algunas propiedades interesantes.
1- Application.Calculation: que permite modificar la opción de cálculo (Automático, Manual o Automático excepto tablas de datos).
2- Application.CalculateBeforeSave: indicaremos True para que los libros se calculen antes de guardarlos en el disco
OJO:si la propiedad Calculation se establece como xlManual.
3- Application.CalculateBeforeSave: indicamos cuál es la tecla habilitada para interrumpir el recálculo de nuestras fórmulas (xlAnyKey, xlNoKey o xlEscKey).
Application.Calculation = xlCalculationAutomatic Application.CalculateBeforeSave = True Application.CalculateBeforeSave = xlEscKey
4- Application.Caption: Devuelve o establece un valor String que representa el nombre que aparece en la barra de título de la ventana principal de Microsoft Excel (es la parte superior de Excel... donde encontramos el nombre del libro de trabajo).
Por defecto, si no establecemos un nombre o si se establece el nombre en blanco (Application.Caption = "") , esta propiedad devuelve el texto "Excel".)
Application.Caption = "Aprendiendo VB con Excelforo"
Otra propiedad curiosa:
5- Application.Cursor: Cambia la tipología del icono del cursor entre:
xlDefault-El puntero predeterminado.
xlIBeam-El puntero en i.
xlNorthwestArrow-El puntero flecha noroeste.
xlWait-El puntero reloj de arena.
La propiedad Cursor no se restablecerá automáticamente cuando la macro termine de ejecutarse.
Debereremos restablecer el puntero xlDefault antes de que la macro detiene su ejecución.
Sub CambioCursor() 'xlDefault .El puntero predeterminado. 'xlIBeam .El puntero en i. 'xlNorthwestArrow .El puntero flecha noroeste. 'xlWait .El puntero reloj de arena. 'La propiedad Cursor no se restablecerá automáticamente cuando la macro termine de ejecutarse. 'Deberá restablecer el puntero xlDefault antes de que la macro detiene su ejecución. Application.Cursor = xlIBeam For x = 1 To 100 For y = 1 To 100 Range("A1").Value = x + y Next y Next x Application.Cursor = xlDefault End Sub
6- Application.DecimalSeparator: para configurar los separadores decimales o de miles de nuestro libro...
Sub CambioSeparadoresSistema() Range("A1").Formula = "1,234,567.89" MsgBox "procedemos al cambio..." 'definimos los nuevos separadores Application.DecimalSeparator = "-" Application.ThousandsSeparator = " " 'y aplicamos Application.UseSystemSeparators = False End Sub
7- Application.DisplayAlerts: daremos valor True para que Excel muestra ciertos mensajes y avisos mientras se ejecuta una macro; y False para suprimir los mensajes y los mensajes de alerta mientras se ejecuta una macro. Cuando un mensaje requiere una respuesta, Microsoft Excel elige la respuesta predeterminada.
'se cierra el libro y no se solicita al usuario que guarde los cambios. 'No se guardan los cambios realizado en Libro1.xlsm !! Application.DisplayAlerts = False Workbooks("Libro1.xlsm").Close Application.DisplayAlerts = True
8- Application.Caption: valor True si los eventos están habilitados para el objeto especificado.
Asociado normalmente a eventos de nuestra hoja de cálculo o objetos ActiveX
OJO por que no es funcional para eventos dentro de un userForm!!
'En este ejemplo deshabilita los eventos antes de que se guarde un archivo para que no se produce el evento BeforeSave Application.EnableEvents = False ThisWorkbook.Save Application.EnableEvents = True
9- Application.ScreenUpdating: True si está activada la actualización/refresco de la pantalla.
Acelera la ejecución de las macros...
Recomendable finalizar nuestra macro dando valor False.
'veamos un ejemplo ocultando columnas Sub TestAceleración_ScreenUpdating() Dim elapsedTime(2) 'activamos el refresco de pantalla Application.ScreenUpdating = True For i = 1 To 2 'para el segundo caso lo desactivamos If i = 2 Then Application.ScreenUpdating = False startTime = Time Worksheets("Hoja1").Activate 'recorremos todas las columnas de la hoja For Each c In ActiveSheet.Columns 'si la columna es par If c.Column Mod 2 = 0 Then 'la ocultamos c.Hidden = True End If Next c stopTime = Time elapsedTime(i) = (stopTime - startTime) * 24 * 60 * 60 Next i 'lo dejamos activo Application.ScreenUpdating = True 'y mostramos los tiempos MsgBox "Tiempo transcurrido, screenupdating ON: " & elapsedTime(1) & " segundos." & vbCrLf & _ "Tiempo transcurrido, screenupdating OFF: " & elapsedTime(2) & " segundos." End Sub
Y la última propiedad a comentar (por no eternizar la lista):
10- Application.Visible: True o False para determinar si el objeto (nuestra aplicación) está o no visible a ojos del usuario...
'Hacemos Excel invisible.. pero operativo. Application.Visible = False 'forzamos la espera de 13 segundos Application.Wait Now + TimeValue("00:00:13") 'con un mensajito MsgBox "sigo operativo" 'y terminamos haciendo visible la aplicación Application.Visible = True
Por supuesto hay muchos más.. y te invito a investigar
;-)
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.