Sto sviluppando un progetto VBA in Word e si è verificato un problema con la gestione degli eventi quando si utilizza una classe che ne implementa un'altra.Errore di run-time 459 quando si utilizza WithEvents con una classe che implementa un altro
mi definiscono una classe vuota, IMyInterface
:
Public Sub Xyz()
End Sub
Public Event SomeEvent()
E una classe, MyClass
che implementa quanto sopra:
Implements IMyInterface
Public Event SomeEvent()
Public Sub Xyz()
' ... code ...
RaiseEvent SomeEvent
End Sub
Private Sub IMyInterface_Xyz()
Xyz
End Sub
Se creo una terza classe, OtherClass
, che dichiara una variabile membro con il tipo di classe di interfaccia:
Private WithEvents mMy As IMyInterface
e provare per inizializzare questa variabile con un'istanza della classe che implementa:
Set mMy = New MyClass
ottengo un errore di run-time '459': Questo componente non supporta questa serie di eventi.
Il MSDN page per questo messaggio di errore indica:
"Si è tentato di utilizzare una variabile WithEvents con un componente che non può lavoro come fonte di evento per il insieme di eventi specificato, ad esempio. , si può affondare gli eventi di un oggetto , quindi creare un altro oggetto che implementa il primo oggetto. Anche se si potrebbe pensare che si potrebbe affondare gli eventi dal oggetto implementato, che non è automaticamente il caso. Implementa solo implementa un'interfaccia per i metodi e le proprietà "
Le suddette praticamente riassume quello che sto cercando di fare. La formulazione, 'che non è automaticamente il caso', piuttosto che" questo è flat-out impossibile ", sembra suggerire che ci sia un po 'di lavoro manuale che devo fare per farlo funzionare, ma non mi dice cosa! Qualcuno sa se questo è possibile in VBA?
Grazie per questo, sembra che sia un bug tutto bene Auguro alla MSDN Hadn Ho ancora una speranza, ma penso di avere una soluzione alternativa, anche se l'utilizzo degli eventi sarebbe stato più elegante .. C'est la vie –
@KenKeenan non è un bug, piuttosto come funzionano gli eventi COM. Puoi usare gli eventi insieme a interfacce utilizzando un modello di adattatore, come illustrato [qui] (https://stackoverflow.com/a/45825831/1188513). (mi dispiace di svegliare il morto con questo commento - questa domanda e risposta è stata collegata da una domanda recente ... e il l'argomento è affascinante IMO) –