繁体   English   中英

VBA Excel用户窗体EventHandler,用于动态生成的控件无法按预期工作

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

我正在使用Excel 2013,设计一个带有在运行时创建的控件的用户窗体。 我在制作将在动态创建的控件的change事件上触发的函数时遇到了麻烦。

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

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

我有一个函数,该函数传递了我想要控件放入的框架,这样我就可以从类中创建所有组件。

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

但是此功能将无法运行,我无法弄清原因。 进行更改时,不会出现消息框,并且此函数中的断点不会停止任何代码的运行。 我究竟做错了什么?

在cyboashu的一些探索性问题的帮助下,我弄清楚了什么地方出了问题。 包含myComboBox的类不属于为整个用户表单的范围声明的变量。 函数创建完成后,组件仍位于myFrame ,但是忘记了要在事件上触发的函数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM