vba - visual - Laufzeitfehler 459 beim Verwenden von WithEvents mit einer Klasse, die eine andere implementiert



visual basic dim variable (1)

Ich entwickle ein VBA-Projekt in Word und habe ein Problem mit der Behandlung von Ereignissen bei der Verwendung einer Klasse, die eine andere implementiert.

Ich definiere eine leere Klasse, IMyInterface :

Public Sub Xyz()
End Sub

Public Event SomeEvent()

Und eine Klasse, MyClass , die das obige implementiert:

Implements IMyInterface

Public Event SomeEvent()

Public Sub Xyz()
  ' ... code ...
  RaiseEvent SomeEvent
End Sub

Private Sub IMyInterface_Xyz()
   Xyz
End  Sub

Wenn ich eine dritte Klasse, OtherClass , OtherClass , die eine Membervariable mit dem Typ der Interface-Klasse deklariert:

Private WithEvents mMy As IMyInterface

und versuchen Sie, diese Variable mit einer Instanz der implementierenden Klasse zu initialisieren:

Set mMy = New MyClass

Ich erhalte einen Laufzeitfehler '459': Diese Komponente unterstützt diese Ereignismenge nicht.

Die MSDN-Seite für diese Fehlermeldung besagt:

"Sie haben versucht, eine WithEvents-Variable mit einer Komponente zu verwenden, die nicht als Ereignisquelle für die angegebene Menge von Ereignissen fungieren kann. Beispielsweise können Sie Ereignisse eines Objekts senken und dann ein anderes Objekt erstellen, das das erste Objekt implementiert Sie könnten denken, Sie könnten die Ereignisse aus dem implementierten Objekt versenken, das ist nicht automatisch der Fall. Implements implementiert nur eine Schnittstelle für Methoden und Eigenschaften. "

Das oben genannte fasst ziemlich genau zusammen, was ich zu tun versuche. Die Formulierung "das ist nicht automatisch der Fall" und nicht "das ist unmöglich", scheint darauf hinzudeuten, dass es einige manuelle Arbeiten gibt, die ich tun muss, um es zum Laufen zu bringen, aber das tut es nicht sag mir was ! Weiß jemand, ob dies in VBA möglich ist?

https://code.i-harness.com


Anscheinend dürfen Events nicht wie in "Implements" durch eine Interface-Klasse in die konkrete Klasse geleitet werden. In diesem Artikel heißt es: "Ereignisdeklarationen der abstrakten Schnittstelle sind nicht in der Schnittstelle enthalten, die von konkreten Klassen geerbt wird. Ich habe nirgendwo gefunden, dass dies als ein Fehler anerkannt wurde, aber es scheint einer zu sein. "

Hier ist der Link zur Quelle: http://www.devx.com/getHelpOn/10MinuteSolution/20416

:-(