Curso Excel VBA y Macros – Cap. 40 – Eventos de Aplicación y módulos de clase

<<CURSO COMPLETO EN YOUTUBE>>

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.

Archivo PERSONAL para tener macros siempre disponibles.

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

<<CURSO COMPLETO EN YOUTUBE>>

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.

You may also like...