son para los instalar habilitar datos cuales complementos como analisis excel vba events excel-vba add-in

para - ¿Cómo puede un Complemento de Excel responder a eventos en cualquier hoja de trabajo?



cuales son los complementos de excel (2)

No use la palabra clave New en la declaración de dim. Le está diciendo que haga una instancia de la clase cuando sea necesaria, pero luego nunca vuelve a consultarla, por lo que nunca será necesaria. En lugar:

Public MySheetHandler As SheetChangeHandler Sub Auto_Open Set MySheetHandler = New SheetChangeHandler End Sub

Esa línea en Auto_Open (que se ejecuta al inicio) creará una instancia de la clase.

Nuestros libros de trabajo son SpreadsheetML generados por el servidor , que no pueden incluir ningún código VBA. La creación de archivos nativos de Excel o archivos XML de Excel 2007 tampoco es una opción, lamentablemente.

Por lo tanto, tengo un complemento de Excel (VBA, no XLL) que cada uno de nuestros usuarios instala para agregar algunas UDF adicionales, etc., que nuestros libros de trabajo necesitan.

Esto funciona muy bien, pero ahora necesito tener una macro que deba ejecutarse cada vez que el usuario cambie el texto en cualquier celda, independientemente del libro de trabajo que esté utilizando activamente en ese momento.

Hasta ahora, he creado un nuevo módulo de Clase (SheetChangeHandler) en mi Add-In, con el siguiente código:

Option Explicit Private WithEvents App As Application Private Sub Class_Initialize() Set App = Application End Sub Private Sub App_SheetChange(ByVal Sh As Object, ByVal Source As Range) Debug.Print "Changed" On Error GoTo Finish App.EnableEvents = False DoWorkOnChangedStuff Sh, Source Finish: App.EnableEvents = True End Sub

En mi Add-In, he agregado una línea para crear una instancia de la nueva clase:

Public MySheetHandler As New SheetChangeHandler

Según tengo entendido, esto debería hacer que Excel envíe los eventos del Complemento de cambio de hoja para todos los libros abiertos, sin que esos libros de trabajo necesiten contener ningún código de macro.

Pero no está funcionando ... no hay líneas de depuración, y mi código DoWorkOnChangedStuff no se está llamando cuando cambio una celda en cualquier hoja de trabajo.

¿Algunas ideas?


Obtuve información de: http://www.bettersolutions.com/vba/events/creating-application-level.htm y probé la solución de Dick Kusleika pero no conseguí que el módulo de clase funcionara. Después de 2 días de búsqueda en la web y antes de rendirme, probé esto y trabajé para mi. Teniendo en cuenta: "los libros de trabajo son SpreadsheetML generados por el servidor, que no pueden incluir ningún código VBA", también mis requisitos.

Escribí esto en mi módulo de clase llamado "ApplicationEventClass":

Option Explicit Public WithEvents ExcelAppEvents As Application Private Sub Class_Initialize() Set ApplicationClass.ExcelAppEvents = Application End Sub Private Sub ExcelAppEvents_SheetChange(ByVal Sh As Object, ByVal Target As Range) Target.Font.ColorIndex = 5 End Sub

Y esto en mi módulo llamado "Module1":

Option Explicit Public ApplicationClass As New ApplicationEventClass Sub ConnectEventHandler() On Error Resume Next Set ApplicationClass.ExcelAppEvents = Application End Sub

¡Eso es! Espero que esto funcione para ti también. Obviamente, solo cambie el color del texto a azul en cualquier hoja de trabajo.