Cómo se instancia una variable de complemento de Excel VBA
En la ventana de referencias, puedes buscar y establecer una referencia a un complemento personalizado. Para efectos de discusión, digamos que se llama MyAddIn.xlam. He cambiado el nombre del proyecto a MyAddIn y se encuentra en la ruta estándar de complementos. Entonces, he logrado hacer eso y luego he definido una variable global asociada de la siguiente manera en un libro de Excel diferente:
Private m_MyAddIn As MyAddIn.thisworkbook
¿Cómo y cuándo instancio la variable que he definido? Sería simple si pudiera convertir el elemento de la colección Application.AddIns asociado a mi complemento específico, pero esa no es una opción.
Dentro del código de MyAddIn, he intentado definir una propiedad pública llamada ParentWorkbook que simplemente devuelve ThisWorkbook. También he intentado hacer lo mismo en una clase pública definida en MyAddIn. Pero no logro entender cómo instanciar la variable.
Esto es lo que estoy intentando hacer:
1. MyAddIn genera un evento personalizado llamado MyEvent cada vez que se abre un libro o se crea una nueva hoja.
2. Uno o más xlsb personalizados, MyCustom1.xlsb y MyCustom2.xlsb, manejarán el evento.
3. Debido a que los xlsb están buscando un evento, necesito poder definir una variable WithEvents MyAddIn en los xlsb para poder manejarlos.
4. Por ejemplo, un xlsb de tabla dinámica podría realizar algunas acciones personalizadas basadas en eventos de tabla dinámica. Todos estos podrían configurarse en el xlsb una vez que recibiera notificaciones de que se abrió un nuevo archivo. Podría verificar si una tabla dinámica está presente y omitir todas las demás, etc.
¿Por qué estoy intentando hacerlo de esta manera?
1. Estoy tratando de evitar mucho ruido. Si cada xlsb usa el objeto de la aplicación para verificar los archivos abiertos, etc., todos se ejecutarán cada vez que se abra un archivo en Excel.
2. Mi idea es que solo MyAddIn verifique ese evento y luego genere los eventos personalizados según corresponda para los xlsb.
Espero que esto ayude.
Gracias por cualquier idea y/o sugerencia.
davy.ai
Para instanciar la variable, puedes utilizar la declaración Set para asignar la variable al objeto ThisWorkbook del complemento AddIn. Puedes hacer esto en el evento Workbook_Open del libro donde se define la variable, o en un módulo separado que inicializa la variable.
Por ejemplo:
Alternativamente, puedes definir una función pública en el complemento AddIn que devuelva el objeto ThisWorkbook, y llamar a esa función desde el libro donde se define la variable. Por ejemplo:
En MyAddIn:
En el libro donde se define la variable:
Una vez que hayas instanciado la variable, puedes usarla para manejar los eventos personalizados lanzados por MyAddIn. Para declarar la variable WithEvents en tus xlsbs personalizados, puedes agregar el siguiente código a un módulo:
Este código declara una variable WithEvents para el objeto MyAddIn, lo inicializa en el evento Workbook_Open y maneja el evento personalizado MyEvent en el controlador de eventos m_MyAddIn_MyEvent.
Utilizando este enfoque, puedes evitar la verificación repetitiva de los libros abiertos y tener un mayor control sobre el manejo de eventos en tus xlsbs personalizados.