Я разрабатываю проект VBA в Word и встретился с проблемой с обработкой событий при использовании класса, который реализует другого.
Я определяю пустой класс, IMyInterface
:
Public Sub Xyz()
End Sub
Public Event SomeEvent()
И класс, MyClass
это реализует вышеупомянутое:
Implements IMyInterface
Public Event SomeEvent()
Public Sub Xyz()
' ... code ...
RaiseEvent SomeEvent
End Sub
Private Sub IMyInterface_Xyz()
Xyz
End Sub
Если я создаю третий класс, OtherClass
, это объявляет членскую переменную с типом интерфейсного класса:
Private WithEvents mMy As IMyInterface
и попытайтесь инициализировать эту переменную с экземпляром класса с реализацией:
Set mMy = New MyClass
Я получаю ошибку времени выполнения '459': Этот компонент не поддерживает этот набор событий.
Страница MSDN для этого сообщения об ошибке состояния:
"Вы пытались использовать переменную WithEvents с компонентом, который не может работать источником события для указанного набора событий. Например, можно снижать события объекта, затем создать другой объект который Реализации первый объект. Хотя Вы могли бы думать, что могли снизить события от реализованного объекта, который автоматически не имеет место. Реализации только реализуют интерфейс для методов и свойств".
Вышеупомянутое в значительной степени подводит итог того, что я пытаюсь сделать. Формулировка, "это автоматически не имеет место", а не "это, утончаются невозможные", кажется, предполагает, что существует некоторый бит физического труда, который я должен сделать, чтобы заставить это работать, но это не говорит мне что! Кто-либо знает, возможно ли это в VBA?
По-видимому, события не могут быть переданы через интерфейсный класс в конкретный класс, как вы хотите, используя "Implements". В этой статье говорится: "Декларации событий абстрактного интерфейса не включаются в интерфейс, который наследуется конкретными классами". Я нигде не нашел, чтобы это было признано ошибкой; однако, похоже, что это действительно ошибка."
Вот ссылка на источник: http://www.devx.com/getHelpOn/10MinuteSolution/20416
:-(