vba - son - Error de tiempo de ejecución 459 al usar WithEvents con una clase que implementa otro
para que son los modulos de clase vba (1)
Aparentemente, no se permite que los eventos pasen a través de una clase de interfaz a la clase concreta que desee utilizando "Implementos". En este artículo dice: "Las declaraciones de eventos de la interfaz abstracta no están incluidas en la interfaz heredada por clases concretas. No he encontrado en ningún lugar que esto haya sido reconocido como un error, sin embargo, parece ser uno. "
Aquí está el enlace a la fuente: http://www.devx.com/getHelpOn/10MinuteSolution/20416
:-(
Estoy desarrollando un proyecto de VBA en Word y he encontrado un problema con el manejo de eventos cuando uso una clase que implementa otro.
IMyInterface
una clase vacía, IMyInterface
:
Public Sub Xyz()
End Sub
Public Event SomeEvent()
Y una clase, MyClass
que implementa lo anterior:
Implements IMyInterface
Public Event SomeEvent()
Public Sub Xyz()
'' ... code ...
RaiseEvent SomeEvent
End Sub
Private Sub IMyInterface_Xyz()
Xyz
End Sub
Si creo una tercera clase, OtherClass
, que declara una variable miembro con el tipo de la clase de interfaz:
Private WithEvents mMy As IMyInterface
e intente inicializar esta variable con una instancia de la clase implementadora:
Set mMy = New MyClass
Obtengo un error en tiempo de ejecución ''459'': este componente no admite este conjunto de eventos.
La página de MSDN para este mensaje de error dice:
"Intentó usar una variable WithEvents con un componente que no puede funcionar como un origen de eventos para el conjunto de eventos especificado. Por ejemplo, puede estar hundiendo eventos de un objeto y luego crear otro objeto que Implemente el primer objeto. podría pensar que podría hundir los eventos desde el objeto implementado, que no es automáticamente el caso. Implements solo implementa una interfaz para métodos y propiedades ".
Lo anterior más o menos resume lo que estoy tratando de hacer. La fraseología, "eso no es automáticamente el caso", en lugar de "esto es completamente imposible", parece sugerir que hay algo de trabajo manual que debo hacer para que funcione, pero no funciona. ¡dime que ! ¿Alguien sabe si esto es posible en VBA?