Publicado el 10 de Mayo del 2017
1.024 visualizaciones desde el 10 de Mayo del 2017
210,9 KB
6 paginas
Creado hace 11a (02/09/2013)
283
Capítulo 8
Administración de eventos
1. Presentación
Administración de eventos
Un evento es una acción del usuario o del sistema reconocido por un objeto
de Microsoft Excel. El evento desencadena un procedimiento, asociado al
evento del objeto activo.
Estos procedimientos le permiten asociar un código personalizado en respues-
ta a un evento que se produce en un objeto Excel (libro, hoja, formulario, grá-
fico, etc.).
284
VBA Excel 2013
Programación en Excel: macros y lenguaje VBA
2. Escritura de eventos
2.1 Eventos de libro, de hoja o de formulario
Usted puede acceder a los procedimientos de eventos asociados a un objeto de
la siguiente manera:
dEn la ventana Explorador de proyectos, haga doble clic en el objeto de-
seado (libro, hoja o formulario) para hacer aparecer la ventana de código
correspondiente.
dAbra la lista desplegable a la izquierda de la ventana de código y seleccione
Workbook, Worksheet o UserForm, según el objeto seleccionado.
dTambién puede seleccionar un evento vinculado al objeto seleccionado en la
lista desplegable de la derecha, para asociarle un código personalizado.
Observación
La ejecución de los procedimientos de eventos, se puede desactivar en
cualquier momento asignando el valor False a la propiedad EnableEvents del
objeto Application.
d
e
v
r
e
s
e
r
s
t
h
g
i
r
l
l
A
-
I
N
E
s
n
o
i
t
i
d
E
©
Administración de eventos
Capítulo 8
Ejemplo
285
Este ejemplo muestra cómo obtener un listado histórico de todos los hiper-
vínculos visitados en la hoja de cálculo activa.
Resultado en Excel:
286
VBA Excel 2013
Programación en Excel: macros y lenguaje VBA
2.2 Eventos del objeto Application
Se necesitan tres etapas para la escritura y ejecución de los eventos del objeto
Application.
Etapa 1
dInserte un módulo de clase:
Insertar - Módulo de clase
o abra la lista
y haga clic en Módulo de clase.
dUna vez insertado el módulo, asígnele un nombre.
Ejemplo
Dele el nombre ObjApplication al módulo de clase.
Etapa 2
dEn el módulo de clase, cree un objeto Application con el siguiente código:
Public WithEvents NomObjeto As Application
Ejemplo
Creación del objeto MiAplicación como aplicación.
Public WithEvents MiAplicacion As Application
El objeto así creado queda disponible en la lista de la izquierda del módulo.
dSeleccione el objeto creado en la lista de la izquierda del módulo y luego se-
leccione el evento esperado en la lista de la derecha. Escriba el código de los
procedimientos que desea generar.
d
e
v
r
e
s
e
r
s
t
h
g
i
r
l
l
A
-
I
N
E
s
n
o
i
t
i
d
E
©
Administración de eventos
Capítulo 8
Ejemplo
287
Creación de dos procedimientos de eventos: el primero realiza la inserción
de una nueva hoja; el segundo, la creación de un nuevo libro.
Public WithEvents MiAplicacion As Excel.Application
______________________________________________________________________
Private Sub MiAplicacion_WorkbookNewSheet _
(ByVal Wb As Workbook, ByVal Sh As Object)
Dim NomHoja As String
' Cada vez que se agrega una hoja se pide al usuario
' que introduzca un nombre que a continuación se destinará a la hoja
' insertada tras las hojas existentes
NomHoja = InputBox("Introduzca el nombre de la hoja")
ActiveSheet.Name = NomHoja
ActiveSheet.Move After:=Sheets(Sheets.Count)
End Sub
______________________________________________________________________
Private Sub MiAplicacion_NewWorkbook(ByVal Wb As Workbook)
Dim NbHojas As Integer
Dim NbActual As Integer
Dim Diferencia As Integer
' Por cada nuevo libro,
' solicitamos al usuario la cantidad de hojas
' Según el caso, se agregan o eliminan las hojas necesarias
Do
NbHojas = Application.InputBox _
("¿Cantidad de hojas?", Type:=1)
Loop While NbHojas = False
NbActual = Sheets.Count
Diferencia = NbActual - NbHojas
' Eliminar las hojas de más
' Eliminar los mensajes de alerta con el fin
' de no obtener mensajes en la eliminación de hojas
Do While Diferencia > 0
Application.DisplayAlerts = False
Sheets.Item(Diferencia).Select
ActiveWindow.SelectedSheets.Delete
Diferencia = Diferencia - 1
Loop
' Agregar hojas necesarias
' Se desactivan los eventos para
' no indicar los nombres de las nuevas hojas
Do While Diferencia < 0
Application.EnableEvents = False
Sheets.Add
288
VBA Excel 2013
Programación en Excel: macros y lenguaje VBA
Diferencia = Diferencia + 1
Loop
' Reactivar eventos y alertas
Application.EnableEvents = True
Application.DisplayAlerts = True
End Sub
Etapa 3
dActive un módulo cualquiera y conecte el objeto declarado en el módulo de
clase con el objeto Application para las siguientes instrucciones:
Dim NomVariable As New NomModuloDeClase
Sub NomProced ()
Set NomVariable.NomObjeto = Application
End Sub
Ejemplo
Agregue el siguiente código en el módulo Declaraciones.
Option Explicit
Dim app As New ObjApplication
________________________________________________________________
Sub InicializaMiAplicacion()
Set app.MiAplicacion = Application
End Sub
Finalmente, llame al procedimiento InicializaMiAplicacion al abrir el libro
(módulo de clase ThisWorkbook).
Private Sub Workbook_Open()
InicializaMiAplicacion
End Sub
Cuando se abra el libro, se ejecutarán automáticamente los procedimientos de
eventos creados durante la etapa 2 y se agregarán los libros o las hojas. Estos
procedimientos se desactivarán al cerrar el libro.
d
e
v
r
e
s
e
r
s
t
h
g
i
r
l
l
A
-
I
N
E
s
n
o
i
t
i
d
E
©
Comentarios de: Capítulo 8 - Administración de eventos (0)
No hay comentarios