Vba 对实现另一个类的类使用WithEvents时出现运行时错误459

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

我正在Word中开发一个VBA项目,在使用实现另一个VBA项目的类时遇到了处理事件的问题

我定义了一个空类,
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事件的工作方式。您可以使用适配器模式将事件与接口一起使用,如图所示。(很抱歉用这句话惊醒死者——这篇问答是从最近的一个问题链接而来的……这个话题很吸引人)