VBA Excel 动态生成控件的用户窗体事件处理程序未按预期工作

VBA Excel Userform EventHandler for dynamically generated controls not working as expected

我在 Excel 2013 年工作,设计一个带有在 运行 时间创建的控件的用户窗体。我在创建将在动态创建的控件的更改事件上触发的函数时遇到问题。

控件包含在单独的 class 模块中,该模块创建并管理它们。我想添加一个在组合框的更改事件上触发的函数,所以我将其声明为 WithEvents:

Private WithEvents myComboBox As MSForms.ComboBox
... other controls and variable declarations...

我有一个函数传递了我希望控件所在的框架,这样我就可以从 class.

中创建所有组件
Sub initialize(myID As String, myFrame As MSForms.Frame, Left As Double, Top As Double)
    ...
    Set myComboBox = myFrame.Controls.Add("Forms.ComboBox.1", myID & "_comboBox")
    ...
End Sub

一切正常,虽然 myComboBox 成功更改了 ComboBox 的显示方式,但创建了 ComboBox 并更改了属性。

因为 myComboBox 声明为 WithEvents,我可以在下拉菜单中找到 myComboBox_Change 作为选项并将其放入模块中:

Private Sub myComboBox_Change()
    MsgBox ("Change Event Fired")
End Sub

但是这个函数不会运行,我不明白为什么。进行更改时不会出现消息框,此函数中的断点不会停止 运行ning 中的任何代码。我做错了什么?

在cyboashu的一些探究性问题的帮助下,我弄清楚了问题所在。包含 myComboBox 的 class 不是由为整个用户窗体的范围声明的变量保存的。创建它的函数完成后,组件仍在 myFrame,但事件触发的函数已被遗忘