Curso Excel VBA y Macros – Cap. 38 – Automatizando macros con Eventos de Libro o Workbook

<<CURSO COMPLETO EN YOUTUBE>>

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

<<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...