VBA自定义事件的多个侦听器

VBA自定义事件的多个侦听器,vba,events,ms-word,Vba,Events,Ms Word,在VBA(MS Word)中,是否可以为自定义事件设置多个侦听器?我根据创建了一个自定义事件:但我真正想要的是有多个侦听器 一个事件只针对它所关联的实例触发似乎是合乎逻辑的,但我想在事件发生时触发几个地方的代码。。。可能吗 修改上述代码表参考: FactoryTest呼叫工厂。工厂引发了一个事件。FactoryTest侦听事件并响应 添加一个新的类模块并将其命名为Factory Public Event AfterInitialize() Private Sub Class_Initialize

在VBA(MS Word)中,是否可以为自定义事件设置多个侦听器?我根据创建了一个自定义事件:但我真正想要的是有多个侦听器

一个事件只针对它所关联的实例触发似乎是合乎逻辑的,但我想在事件发生时触发几个地方的代码。。。可能吗

修改上述代码表参考:

FactoryTest呼叫工厂。工厂引发了一个事件。FactoryTest侦听事件并响应

添加一个新的类模块并将其命名为Factory

Public Event AfterInitialize()
Private Sub Class_Initialize()

End Sub

Public Sub test()
    RaiseEvent AfterInitialize
End Sub
添加另一个类模块,名称为FactoryTest

Private WithEvents cFactory As Factory

Private Sub Class_Initialize()
    Set cFactory = New Factory
    cFactory.test
End Sub

Private Sub cFactory_AfterInitialize()
    Debug.Print "after inialized..."
End Sub
并使用下面的代码添加一个标准模块

 Sub Main()

    Dim fTest As FactoryTest
    Set fTest = New FactoryTest

End Sub

希望我能正确理解你的问题。如果您需要所有
FactoryTests
响应单个事件,您可能需要将对一个常见
Factory
的引用传递给所有
FactoryTests
实例,而不是在每个
FactoryTest
中创建一个新实例。嗯

标准模块,这里创建了
Factory
的公共实例,并创建了两个
FactoryTests
,它们都响应
Factory
的相同事件

Factory test class模块,在每个模块接收对一个公共
工厂
实例的引用的位置创建多个

名为
FactoryTest1
FactoryTest2
的两个工厂测试类的输出


所以简而言之我想要另一个名为Factory2的类模块,它将能够使用与Factory使用的相同事件…是的,可以有多个侦听器,只需创建另一个类,如
FactoryTest
,在其中声明和创建类
Factory
的实例,并以与类
FactoryTest
中相同的方式添加事件处理程序。还是我误解了你的问题?嗨,迪-谢谢你的评论。我想我试过了,是的,我可以让FactoryTest2捕获来自Factory的事件,但到目前为止,每个FactoryTestx都是它自己的Factory实例,我无法让FactoryTest和FactoryTest2捕获相同的事件。基本上,我想提出一个单一的事件,我所有的FactoryTests都将捕获/响应。。。我希望这是有道理的!?是的,我想我们在同一页-我会测试一下,然后再给你回复,非常感谢:-D
Option Explicit

 Sub Main()
    Dim myFactory As Factory
    Set myFactory = New Factory

    Dim test1 As FactoryTest1
    Dim test2 As FactoryTest2

    Set test1 = New FactoryTest1
    Set test2 = New FactoryTest2

    Set test1.FactoryInstance = myFactory
    Set test2.FactoryInstance = myFactory

    myFactory.test
End Sub
Option Explicit

Private WithEvents cFactory As Factory

Private Sub cFactory_AfterInitialize()
    Debug.Print "after inialized..." & VBA.TypeName(Me)
End Sub

Public Property Get FactoryInstance() As Factory
    Set FactoryInstance = cFactory
End Property

Public Property Set FactoryInstance(ByRef factoryObject As Factory)
    Set cFactory = factoryObject
End Property
after inialized...FactoryTest1
after inialized...FactoryTest2