Curso Excel VBA y Macros – Cap. 40 – Eventos de Aplicación y módulos de clase
Siguiendo con el tema de eventos en Excel, ahora toca ver en este video tutorial los eventos a nivel Aplicación o Application. Ya vimos los aplicables a Libro que se aplican a un archivo en particular, así como los eventos de Hoja que aplican a una hoja de un archivo en particular.
Los eventos de Aplicación serán aplicables a cualquier archivo abierto en Excel y nos permitirán monitorear algunas acciones similares a los otros eventos que ya hemos visto.
Este es el tercer video tutorial de una serie de videos relacionados con los eventos:
- Eventos de Libro (Workbook).
- Eventos de Hoja (Worksheet).
- Eventos de Formulario (UserForm).
- Eventos no asociados a objetos.
- OnTime.
- OnKey.
- Eventos de Aplicación (Application).
Ver video Capítulo 40 Excel VBA & Macros
Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.
Qué son los eventos en VBA
Recordemos el modelo de objetos en Excel: Application > Workbook > Worksheet > Cell. Un evento es algo que le sucede a un objeto o cuando sucede una acción en nuestro archivo, por ejemplo:
- Al dar doble clic en una celda.
- Al cambiar el valor de celdas.
- Al abrir un archivo, al cerrar un archivo.
- Al dar clic en un botón.
- Al iniciar un formulario.
El muy importante conocer los eventos en Excel para escribir macros funcionales. Hay que considerar que los eventos no pueden ser generados por la grabadora de macros, aunque el código VBA generado por la grabadora sí que podemos usarlo en los eventos.
Es posible desactivar los eventos en nuestros archivos usando:
Application.EnableEvents = False
Eventos de Aplicación siempre activos
Si bien los eventos pueden estar en cualquier archivo, los vamos a activar en el archivo PERSONAL para que estén siempre disponibles y se apliquen a cualquier archivo que se abra en Excel. Vamos a suponer que no tenemos el archivo PERSONAL y apenas lo vamos a activar. Sigamos los siguientes pasos:
- Nos vamos a la pestaña Vista > Macros > Grabar macro.
- Le asignamos cualquier nombre.
- En la sección Guardar macro en elegimos Libro de macros personal.
- De nuevo nos vamos a Vista > Macros y elegimos Detener grabación.
- Abrimos el IDE de VBA con Alt + F11.
- En la parte izquierda veremos el archivo personal.
Figura 1. Archivo PERSONAL para tener macros siempre disponibles.
- Para activar los eventos a nivel Aplicación necesitaremos habilitarlos usando un Módulo de clase. Eligiendo el archivo personal nos vamos al Menú Insertar > Módulo de clase.
- Ingresamos el siguiente código VBA para habilitar los eventos.
Public WithEvents AppEventos As Application
Guardar log o histórico de archivos abiertos en Excel
Usando eventos de Aplicación en Excel creamos unas macros que nos ayudarán a llevar un archivo histórico que nos guardará los siguientes valores:
- Ruta y nombre del archivo.
- Fecha y hora de apertura.
- Nombre del usuario de Excel.
- Abierto o Cerrado, según sea el caso.
Nos vamos a la unidad C: y creamos una carpeta llamada Log. La macro automáticamente creará un archivo llamado logfile.CSV y registrará los datos anteriores cada vez que se abre o cierra un archivo en Excel.
Código VBA de las macros
En el objeto ThisWorkbook ingresamos el siguiente código.
Private Sub Workbook_Open() Call Iniciar End Sub
En un Módulo normal ingresamos el siguiente código.
Dim AppObjecto As New Clase1 Sub Iniciar() Set AppObjecto.AppEventos = Application End Sub Sub ActualizarLog(Wb) Dim txt As String Dim Fname As String On Error Resume Next txt = Wb.FullName txt = txt & ", " & Date & ", " & Time txt = txt & ", " & Application.UserName txt = txt & ", " & "Abierto" Fname = "C:\Log\logfile.csv" Open Fname For Append As #1 Print #1, txt Close #1 On Error GoTo 0 End Sub Sub ActualizarLogSalida(Wb) Dim txt As String Dim Fname As String On Error Resume Next txt = Wb.FullName txt = txt & ", " & Date & ", " & Time txt = txt & ", " & Application.UserName txt = txt & ", " & "Cerrado" Fname = "C:\Log\logfile.csv" Open Fname For Append As #1 Print #1, txt Close #1 On Error GoTo 0 End Sub
En el Módulo de clase insertamos el siguiente código.
Public WithEvents AppEventos As Application Private Sub AppEventos_WorkbookBeforeClose(ByVal Wb As Workbook, Cancel As Boolean) Call ActualizarLogSalida(Wb) End Sub Private Sub AppEventos_WorkbookOpen(ByVal Wb As Workbook) Call ActualizarLog(Wb) End Sub
Descarga archivo de ejemplo
040 – Automatizando macros con Eventos de Aplicación.zip
Si te gustó este tutorial por favor regístrate en nuestra Lista de correo y Suscríbete a nuestro canal de YouTube para que estés siempre enterado de lo nuevo que publicamos.