2015-10-06 205 views
1

在VBA(對於MS Word)中,是否可以爲自定義事件設置多個監聽器?我創建了一個自定義事件按照:Custom Event not firing,但我真正想要的是有多個聽衆...VBA自定義事件的多個監聽器

似乎是合乎邏輯的一個事件只會觸發與它有關的實例,但我想觸發代碼幾個地方當一個事件發生時...有可能嗎?

修改後的代碼形式以上參考:

FactoryTest調用廠。工廠舉辦活動。 FactoryTest偵聽事件並作出響應。

添加一個新的類模塊,並將其命名廠

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 
+0

所以......簡而言之......我想叫FACTORY2另一個類模塊,將能夠使用相同的事件作爲工廠使用... – SlowLearner

+1

是的,它可以有多個監聽器,只需創建另一個類,比如'FactoryTest'',在那裏聲明並創建類''Factory''的實例並添加事件處理程序在類'''FactoryTest'''中已經有了相同的方法。或者我誤解了你的問題? – dee

+0

Hi Dee - 感謝您的評論。我*認爲*我試過,是的,我可以讓FactoryTest2從Factory BUT中捕獲一個事件,至此每個FactoryTestx都是它自己的Factory實例,我無法讓FactoryTest和FactoryTest2捕獲相同的事件。 基本上我想提出一個事件,所有我的FactoryTests會陷阱/迴應...我希望這是有道理的!? – SlowLearner

回答

1
標準模塊

希望我能正確理解你的問題。如果您需要所有FactoryTests對單個事件做出響應,您可能必須將參考傳遞給所有FactoryTests實例的一個常見Factory,而不是在每個FactoryTest中創建一個新參考。 HTH

標準模塊,這裏的Factory普通實例被創建和兩個FactoryTests這兩者的Factory

同一事件響應
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 

工廠測試類模塊,創建更多的人其中每個接收到一個公用的參考Factory實例

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 

輸出名爲FactoryTest1兩個廠區測試類和FactoryTest2

after inialized...FactoryTest1 
after inialized...FactoryTest2 
+0

是的,我認爲我們是在同一頁面 - 我會測試並回復你,非常感謝:-D – SlowLearner

+0

不客氣,我很高興它幫助! :) – dee