3

是否可以编写类似全局事件监听器的东西?我想为更多对象(TextBox、CheckBox、OptionButton、Label ...)设置一个监听器。并让听众在我的课堂上。我有一些正常的事件,所以我的想法是这样的:

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

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

从我的运行方法中,我调用 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

4

1 回答 1

0

答案是否定的,你可能最好使用自写代码。这是一个很好的链接,可让您写入 VBA 编辑器

VBA 编辑器编程 - Chip Pearson

此代码取自 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

于 2013-08-22T16:15:31.747 回答