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