Usar eventos con los objetos Application y Project
Puede escribir procedimientos de eventos a nivel de aplicación o de proyecto. Por ejemplo, el evento Activate se produce a nivel de proyecto cuando se activa un proyecto y el evento NewProject se produce el evento a nivel de aplicación cuando se crea un proyecto.
Los procedimientos de eventos del objeto Project están disponibles para cualquier proyecto abierto. Para escribir procedimientos de eventos para el objeto Application, debe crear un nuevo objeto mediante la palabra clave WithEvents en un módulo de clase. Los siguientes pasos muestran cómo crear y probar un controlador de eventos de aplicación simple:
En el Editor de Visual Basic, en el menú de la opción de Proyecto de VBA, elija Insertar y luego elija Módulo de clase para crear una clase denominada Class1. Si quiere, puede cambiar el nombre del módulo de clase en el panel Propiedades. En los ejemplos siguientes, se denomina la clase TestClass.
Pegue el código siguiente en el módulo TestClass.
Option Explicit
Public WithEvents oApp As Application
Private Sub oApp_NewProject(ByVal pj As Project)
MsgBox "You created the " & pj.Name & " project."
End Sub
Private Sub Class_Initialize()
' Add class initialization statements here, if needed.
End Sub
- Abra el módulo ThisProject y pegue el código siguiente.
Option Explicit
Private tClass As New TestClass
Sub TestNewProjectEvent()
Set tClass.oApp = Application
tClass.oApp.Projects.Add
Projects.Add
End Sub
- Ejecute la macro TestNewProjectEvent. La macro llama al método Projects.Add dos veces, una vez al objeto TestClass y una vez directamente mediante el objeto Application. Cuando la aplicación Project crea el primer proyecto, el resultado es un cuadro de diálogo Microsoft Project que contiene el mensaje Ha creado el proyecto Project2. Al hacer clic en Aceptar, Project crea el segundo proyecto y muestra otro cuadro de diálogo con el mensaje Ha creado el proyecto Project3.
Importante Para eventos de nivel de aplicación, registre los controladores de eventos después de establecer Application.Visible = True
.
Si crea una instancia de Project desde otra aplicación y registra un evento de nivel de aplicación antes de establecer la propiedad Visible del objeto de aplicación en verdadero, las propiedades y los métodos de los objetos secundarios de Aplicación no funcionan. Por ejemplo, Application.ActiveProject.Name
no es accesible.
Nota Si el código del evento existe en el archivo global (Global.mpt), se puede ejecutar de forma inesperada o bloquearse.
Si el código de un evento existe en los archivos globales y de proyecto, solo se ejecutará el código del evento del proyecto.
Si el código de un evento no existe en el proyecto, pero existe en el archivo global, se ejecutará el código del evento global.
Si el código de alguno de los tres eventos ( Application.ProjectBeforeClose, Application.ProjectBeforeSave o Project.Open ) existe en el archivo global, pero no existe en el archivo del proyecto, afectará a los archivos global y de proyecto. Si el código de estos eventos existe en los archivos global y de proyecto, el código del archivo global afectará al archivo global y el código del archivo de proyecto, al proyecto.
Soporte técnico y comentarios
¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.