Curso Excel VBA y Macros – Cap. 38 – Automatizando macros con Eventos de Libro o Workbook
En este video tutorial toca tratar uno de los temas que más me gusta al momento de automatizar tareas con macros. Los Eventos nos ayudarán a tener mejores archivos, ya que podremos personalizar procedimientos que se ejecuten cuando suceda algo en el archivo o en los objetos de Excel.
Este será el primer 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 38 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 más comunes de Libro (Workbook)
Los eventos de Libro se aplican a un archivo en particular. El código VBA de estos eventos se aloja en el objeto ThisWorkbook. La siguiente es una lista de los eventos más comunes que podremos aplicar cuando suceda una acción a nivel Archivo.
EVENTO |
DESCRIPCIÓN |
Workbook_Open |
Cuando un archivo es abierto |
Workbook_BeforeClose |
Antes de cerrar el archivo |
Workbook_Activate |
Un archivo es activado |
Workbook_Deactivate |
Un archivo es desactivado |
Workbook_SheetChange |
Cuando el valor de una celda es cambiado de cualquier hoja |
Workbook_SheetSelectionChange |
Cuando se selecciona cualquier celda de cualquier hoja |
Workbook_SheetBeforeDoubleClick |
Antes de dar doble clic en una celda |
Workbook_SheetBeforeRightClick |
Antes de dar clic derecho en una celda |
Workbook_SheetPivotTableUpdate |
Cuando una Tabla dinámica es cambiada o actualizada |
Workbook_BeforePrint |
Antes de imprimir |
Workbook_BeforeSave |
Antes de guardar |
Workbook_NewSheet |
Al insertar una nueva hoja |
Workbook_WindowResize |
Al cambiar el tamaño de una ventana |
Evento Workbook_Open
Este evento se lanza al momento de abrir un archivo de Excel. En el siguiente ejemplo mostramos un mensaje indicando una tarea a realizar dependiendo el día de semana en que se abre el archivo.
Private Sub Workbook_Open() Select Case VBA.Weekday(Now()) Case Is = 1 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de reportes" Case Is = 2 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de reportes de ventas" Case Is = 3 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de consolidado" Case Is = 4 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de ..." Case Is = 5 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de reportes" Case Is = 6 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de reportes" Case Is = 7 MsgBox VBA.WeekdayName(VBA.Weekday(Now())) & " de reportes" End Select End Sub
Evento Workbook_BeforeClose
Lanzaremos este evento al cerrar el archivo. La siguiente macro guardará el archivo antes de cerrar el archivo sin necesidad de que preguntemos si deseamos guardar.
Private Sub Workbook_BeforeClose(Cancel As Boolean) ThisWorkbook.Save End Sub
Evento Workbook_SheetActivate
Este evento se desencadenará al momento de activar una hoja. Con la siguiente macro logramos que cada que se active una hoja, automáticamente se elegirá la celda A1.
Private Sub Workbook_SheetActivate(ByVal Sh As Object) If VBA.TypeName(Sh) = "Worksheet" Then Range("A1").Select End Sub
Evento Workbook_SheetBeforeRightClick
Lanzaremos este evento antes de dar clic derecho en una celda o un rango de celdas. La siguiente macro evitará que se muestre el menú contextual del clic derecho cuando estemos en la Hoja1 y seleccionemos el rango A1:B14.
Private Sub Workbook_SheetBeforeRightClick(ByVal Sh As Object, ByVal Target As Range, Cancel As Boolean) If Sh.Name = "Hoja1" Then If Target.Column <= 2 And Target.Row <= 14 Then Cancel = True MsgBox "El clic derecho está desabilitado para este rango" End If End If End Sub
Evento Workbook_SheetChange
Se desencadenará este evento cada vez que se modifique el valor de cualquier celda de cualquier hoja. Mostraremos un mensaje cada vez que una celda ha sido modificada.
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range) MsgBox "Se ha cambiado la celda " & Target.Address End Sub
Evento Workbook_SheetSelectionChange
Este evento de lanzará cada vez que seleccionamos una celda o un rango de celdas. Con la siguiente macro lograremos que se pinte de verde la celda seleccionada.
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) Sh.Cells.Interior.ColorIndex = 0 Target.Interior.Color = VBA.vbGreen End Sub
Descarga el archivo de ejemplo
038 – Automatizando macros con Eventos de Libro o Workbook.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.