2013-08-22 82 views
3

是否可以寫出如全局事件監聽器?我想有更多的對象(TextBox,CheckBox,OptionButton,Label,...)的偵聽器。並且在我的班上有聽衆。我有一些正常的活動,所以我我的想法是這樣的:多種類型的全局事件

Public WithEvents eventGlobLst As <DontKnowWhat>SomeType</DontKnowWhat> 

Sub setListener(controlObj As SomeType) 
    Set eventGlobList = controlObj 
End Sub 

從我的運行方法,我打電話給子這臺聽衆

For Each pages In csDialgog.MultiPage.Pages 
    For Each objectControl In pages.Controls 

     Set eventClass = New ControlsClass 
     eventClass.setListener objectControl 
     universalObjectCollection.Add eventClass 
    Next 
Next 

這正常工作與經典事件。最後,我有一些事件處理程序:

Private Sub EventGlobLstnr_AfterUpdate() 
    Functions.GlobalChange 
End Sub 

我想知道是否存在,我可以使用的所有對象的一些祖先。或者我必須分別爲每種類型編寫監聽器,並將它們設置爲相同的GlobalChange

回答

0

答案是否定的,你可能最好用自寫代碼。這裏有一個很好的鏈接,使您可以寫入VBA編輯

Programming the VBA editor - Chip Pearson

此代碼從芯片皮爾遜採取:
創建一個事件過程

此代碼將創建一個Workbook_Open事件過程。創建事件過程時,應該使用CreateEventProc方法,以便使用正確的過程聲明和參數列表。 CreateEventProc將創建聲明行和過程行的結束。它返回事件過程開始的行號。

Sub CreateEventProcedure() 
    Dim VBProj As VBIDE.VBProject 
    Dim VBComp As VBIDE.VBComponent 
    Dim CodeMod As VBIDE.CodeModule 
    Dim LineNum As Long 
    Const DQUOTE = """" ' one " character 

    Set VBProj = ActiveWorkbook.VBProject 
    Set VBComp = VBProj.VBComponents("ThisWorkbook") 
    Set CodeMod = VBComp.CodeModule 

    With CodeMod 
     LineNum = .CreateEventProc("Open", "Workbook") 
     LineNum = LineNum + 1 
     .InsertLines LineNum, " MsgBox " & DQUOTE & "Hello World" & DQUOTE 
    End With 
End Sub 

使用.CreateEventProc,您可以爲您希望每個元素的事件來「捕捉」
我相信這是實現你想要的目標的唯一途徑。

乾杯,
kpark