Evento: suceso.
Nos referimos a una determinada acción que se lleva a cabo dentro de Excel: abrir un ventana, cambiar el contenido de una celda, hacer click, llamar a un formulario, imprimir, etc, etc. Todas estas acciones son eventos, factibles de ser capturados y aprovechados para insertar nuestro código cuando se producen.
Los distintos objetos de Excel en VBA tienen sus eventos predeterminados, por cuanto no necesitamos programarlos, simplemente invocarlos. Presionemos alt + f11 para ingresar al editor de visual basic y veamos la siguiente imagen:
en el Explorador de Proyectos podemos visualizar los objetos de este libro: tres hojas y el nodo correspondiente a ThisWorkbook (este libro). Hagamos doble click sobre él y vayamos a la ventana de código de dicho objeto. De la lista desplegable de la izquierda seleccionamos "WorkBook", quedando de la siguiente forma:
VBA nos muestra el primer evento: Open (al abrir el libro)
Como vimos en mi anterior post, cualquier codigo insertado dentro de este Sub se ejecutará cada vez que abramos el libro. Un código sencillo y a modo de ejemplo, que nos muestra un mensaje con el usuario y hora de ingreso a nuestro libro:
Private Sub Workbook_Open()
Dim Usuario As String
Dim Hora As Date
Usuario = Application.UserName
Hora = Now()
MsgBox "Hola: " & Usuario & vbCrLf & "Ha ingresado al sistema a las: " & Hora, vbInformation, "Bienvenido"
End Sub
Dim Usuario As String
Dim Hora As Date
Usuario = Application.UserName
Hora = Now()
MsgBox "Hola: " & Usuario & vbCrLf & "Ha ingresado al sistema a las: " & Hora, vbInformation, "Bienvenido"
End Sub
y el resultado:
recien me di cuenta que no formateé el horario... y no tengo ganas de hacer otra imagen =), ya que el objetivo es mostrar como funciona el evento
Así de simple. Imaginen que de igual forma podríamos guardar en un archivo (por separado) todas las acciones que realizó ese usuario o bien, si estamos controlando, hacer que excel nos remita un mail. Si, jaja, eso también.
Terminemos con Open. Desde la lista desplegable en la esquina superior derecha, podremos elegir unos cuantos mas. Analicemos los mas comunes, por ahora. Notaremos que algunos eventos vienen con argumentos predefinidos:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'evento ANTES DE GUARDAR.
Cancel = True
End Sub
Con esa simple y breve instrucción evito que el usuario pueda cerrar el libro, ya que coloco en True el argumento Cancel. Prueben y verán que el libro no se cierra, ni desde la tradicional "x" de la ventana como así tampoco desde el menu archivo / cerrar. Podríamos aprovechar este evento para imprimir un reporte:
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'evento ANTES DE GUARDAR.
Sheets("Reportes").PrintOut
'guardo los cambios, x si el usuario no lo hizo:
ActiveWorkbook.Save'y saludo:
MsgBox "Chau"
End Sub
obvio que lo del "Chau" está de mas, pero conviene ser educados. =)
Otra, que se produce luego de insertar una hoja. Si yo no quiero que nadie agregue hojas a mi libro, podría hacer lo siguiente:
Private Sub Workbook_NewSheet(ByVal Sh As Object)
Dim Nombre As String
'tomo el nombre de la nueva hoja, aprovechando el argumento por defecto del Sub
Nombre = Sh.Name
'quito el mensaje de alerta (que avisa que se borrará una hoja)
Application.DisplayAlerts = False
'elimino la hoja
Sheets(Nombre).Delete
Application.DisplayAlerts = True
'y le aviso para que deje de insistir
MsgBox "No se pueden agregar nuevas hojas al libro", vbExclamation, "Atencion"
End Sub
resultado, tal cual lo arriba codificado:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If ActiveSheet.Name = "Hoja2" Then
Cancel = True
MsgBox "Esta hoja no se puede imprimir", vbExclamation
End If
End Sub
Si tienen el espíritu un poco aventurero, se adentrarán en el tema y probarán algunas otras, que mencionaré en mi próximo post. Lo haría ahora, pero un amigo termina de invitarme a una "pollada" (pollo asado o al disco, o ambos, todavía no lo sé), para reaudar fondos y terminar de reparar el motor de un Renault 12 (creo que modelo 73'), con el que comenzará a competir en el circuito zonal de "Formula Renault".
Mañana seguimos.
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Etiquetas
Macros
Etiquetas:
Macros
- Obtener enlace
- Correo electrónico
- Otras aplicaciones
Comentarios
Publicar un comentario