Ошибка выполнения 459 при использовании WithEvents с классом, который реализует другой - PullRequest
7 голосов
/ 11 июня 2010

Я разрабатываю проект 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?

1 Ответ

5 голосов
/ 11 июня 2010

Очевидно, что события не могут передаваться через интерфейсный класс в конкретный класс, как вы хотите использовать "Implements".В этой статье говорится: «Объявления событий абстрактного интерфейса не включены в интерфейс, который наследуется конкретными классами. Я нигде не обнаружил, что это было признано ошибкой; однако, похоже, что так оно и есть."

Вот ссылка на источник: http://www.devx.com/getHelpOn/10MinuteSolution/20416

: - (

...