Vba 多类型的全局事件

Vba 多类型的全局事件,vba,events,ms-word,Vba,Events,Ms Word,是否可以编写类似全局事件侦听器的内容?我想有一个更多对象(文本框,复选框,选项按钮,标签,…)的侦听器。让听者在我的课堂上。我有一些正常事件,所以我的想法如下: Public WithEvents eventGlobLst As <DontKnowWhat>SomeType</DontKnowWhat> Sub setListener(controlObj As SomeType) Set eventGlobList = controlObj End Sub 这

是否可以编写类似全局事件侦听器的内容?我想有一个更多对象(文本框,复选框,选项按钮,标签,…)的侦听器。让听者在我的课堂上。我有一些正常事件,所以我的想法如下:

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

Sub setListener(controlObj As SomeType)
  Set eventGlobList = controlObj 
End Sub
这适用于经典事件。最后,我有一些事件处理程序:

Private Sub EventGlobLstnr_AfterUpdate()
    Functions.GlobalChange
End Sub

我想知道是否存在我可以使用的所有对象的祖先。或者我必须为每种类型分别编写侦听器,并将它们设置为相同的
GlobalChange

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

此代码取自Chip Pearson:
创建事件过程

此代码将创建工作簿\打开事件过程。创建事件过程时,应使用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

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