Vba 对实现另一个类的类使用WithEvents时出现运行时错误459
我正在Word中开发一个VBA项目,在使用实现另一个VBA项目的类时遇到了处理事件的问题 我定义了一个空类,Vba 对实现另一个类的类使用WithEvents时出现运行时错误459,vba,ms-word,Vba,Ms Word,我正在Word中开发一个VBA项目,在使用实现另一个VBA项目的类时遇到了处理事件的问题 我定义了一个空类,IMyInterface: Public Sub Xyz() End Sub Public Event SomeEvent() 以及一个类,MyClass,它实现了上述功能: Implements IMyInterface Public Event SomeEvent() Public Sub Xyz() ' ... code ... RaiseEvent SomeEven
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”:此组件不支持这组事件
此错误消息的状态为:
“您试图使用WithEvents
变量,其组件不能
作为事件的事件源工作
指定的事件集。例如,
你可能是一个沉沦的事件
对象,然后创建另一个对象
实现第一个对象的。
虽然你可能认为你可以
从已实现的服务器接收事件
对象,这不会自动成为
case.Implements仅实现
方法和属性的接口。“
以上内容大致概括了我所要做的。“这不是自动发生的”,而不是“这是完全不可能的”,这句话似乎暗示我需要做一些手工工作才能让它工作,但它没有告诉我什么!有人知道这在VBA中是否可行吗?显然,事件不允许通过接口类传递到具体类中,就像您希望使用“实现”一样。在本文中,它指出:“抽象接口的事件声明不包括在由具体类继承的接口中。我没有发现任何地方承认这是一个bug;但是,它似乎确实是一个bug。” 以下是指向源的链接:
:-(谢谢;看起来这是一个bug。我希望MSDN没有让我燃起希望!尽管如此,我认为我有一个解决方法,尽管使用事件会更优雅。这是生活。@KenKeenan不是bug,而是COM事件的工作方式。您可以使用适配器模式将事件与接口一起使用,如图所示。(很抱歉用这句话惊醒死者——这篇问答是从最近的一个问题链接而来的……这个话题很吸引人)