gpt4 book ai didi

vba - 多种类型的全局事件

转载 作者:行者123 更新时间:2023-12-04 19:35:10 25 4
gpt4 key购买 nike

是否可以编写类似全局事件监听器的东西?我想要一个更多对象的监听器(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

最佳答案

答案是否定的,您可能最好使用自写代码。这是一个很好的链接,可以让您写入 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,您可以为每个要“捕获”的元素创建一个事件
我相信这是实现您想要的目标的唯一途径。

干杯,
公园

关于vba - 多种类型的全局事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18374705/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com