Creación de controladores de eventos de nivel de aplicación en Excel
Article
S’aplica a:
Excel 2007, Excel 2003, Excel 2002, Excel 2000
Resumen
Si desea que un controlador de eventos determinado se ejecute cada vez que se desencadene un evento determinado, puede escribir un controlador de eventos para el objeto Application. Los controladores de eventos del objeto Application son globales, lo que significa que, siempre que Microsoft Excel esté abierto, el controlador de eventos se ejecuta cuando se produce el evento adecuado, independientemente del libro que esté activo cuando se produzca el evento.
En este artículo se describe cómo crear un controlador de eventos de nivel de aplicación y se proporciona un ejemplo.
Más información
Para crear un controlador de eventos de nivel de aplicación, debe usar los pasos básicos siguientes:
Declare una variable para el objeto Application mediante la palabra clave WithEvents. La palabra clave WithEvents se puede usar para crear una variable de objeto que responda a eventos desencadenados por un objeto ActiveX (como el objeto Application). NOTA: WithEvents solo es válido en un módulo de clase.
Cree el procedimiento para el evento Application específico. Por ejemplo, puede crear un procedimiento para el evento WindowResize, WorkbookOpen o SheetActivate del objeto que declaró mediante WithEvents.
Cree y ejecute un procedimiento que inicie el controlador de eventos.
En el ejemplo siguiente se usan estos pasos para configurar un controlador de eventos global que muestra un cuadro de mensaje cada vez que cambia el tamaño de cualquier ventana del libro (el evento que desencadena el controlador de eventos).
Creación e inicio del controlador de eventos
Abra un nuevo libro.
En el menú Herramientas, seleccione Macro y, luego, Editor de Visual Basic.
Nota
En Microsoft Office Excel 2007, haga clic en Visual Basic en el grupo Código de la pestaña Desarrollador .
Haga clic en Módulo de clase en el menú Insertar. Esta operación inserta un módulo denominado "<nombre> del libro- Clase1 (código)" en el proyecto.
Escriba la siguiente línea de código en el módulo Class1 (Código):
VB
PublicWithEvents appevent As Application
La palabra clave WithEvents hace que la variable appevent esté disponible en la lista desplegable Object de la ventana del módulo Class1 (Code).
En la ventana del módulo Class1 (Código), haga clic en la lista desplegable Objeto y, a continuación, seleccione appevent en la lista.
En la ventana del módulo Class1 (Código), seleccione la lista desplegable Procedimiento y, a continuación, seleccione WindowResize en la lista. Esta operación agrega lo siguiente a la hoja del módulo Clase1 (código):
VB
PrivateSub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
ByVal Wn As Excel.Window)
EndSub
Agregue código a la hoja del módulo Clase1 (código) para que aparezca de la siguiente manera:
VB
PublicWithEvents appevent As Application
PrivateSub appevent_WindowResize(ByVal Wb As Excel.Workbook, _
ByVal Wn As Excel.Window)
MsgBox "you resized a window"EndSub
A continuación, debe crear una instancia de la clase y, a continuación, establecer el objeto appevent de la instancia de Class1 en Application. Esto sucede porque cuando se declara una variable, WithEvents, en tiempo de diseño, no hay ningún objeto asociado a ella. Una variable WithEvents es igual que cualquier otra variable de objeto: tiene que crear un objeto y asignar una referencia al objeto a la variable WithEvents.
En el menú Insertar, seleccione Módulo para insertar una hoja de módulo de tipo general en el proyecto.
En esta hoja de módulo, escriba el código siguiente:
VB
Dim myobject AsNew Class1
Sub Test()
Set myobject.appevent = Application
EndSub
Ejecute la macro de prueba.
Acaba de establecer el controlador de eventos para que se ejecute cada vez que cambie el tamaño de una ventana de libro en Microsoft Excel.
En el menú Archivo, haga clic en Cerrar y volver a Microsoft Excel.
Cambiar el tamaño de una ventana de libro. Se mostrará un cuadro de mensaje con el mensaje "Ha cambiado el tamaño de una ventana".
Cómo desactivar el controlador de eventos
Si cierra el libro que contiene el proyecto anterior, se desactiva el controlador de eventos de nivel de aplicación. Para desactivar mediante programación el controlador de eventos, siga estos pasos:
Inicie el Editor de Visual Basic.
En el código de macro especificado en el paso 9, cambie la macro a:
VB
Sub test()
Set myobject.appevent = NothingEndSub
Vuelva a ejecutar la macro de prueba.
En el menú Archivo, haga clic en Cerrar y volver a Microsoft Excel.
Obtenga una certificación de Microsoft Office Specialist (MOS) para demostrar que tiene las habilidades necesarias para sacar el máximo partido de Excel 2016.