是否可以编写类似全局事件监听器的内容?我想有一个更多对象的监听器(TextBox,CheckBox,OptionButton,Label,...)。在我班上有听众。我有一些正常的事件,所以我的想法看起来像这样:
Public WithEvents eventGlobLst As <DontKnowWhat>SomeType</DontKnowWhat>
Sub setListener(controlObj As SomeType)
Set eventGlobList = controlObj
End Sub
从我的run-method我调用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 :(得分:0)
答案是否定的,你最好使用自编代码。这是一个很好的链接,允许您写入VBA编辑器
Programming the VBA editor - 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