Excel 如何覆盖动态写入控件的控件更改事件?

Excel 如何覆盖动态写入控件的控件更改事件?,excel,vba,Excel,Vba,我有一个包含以下代码模块的工作簿: 类模块:clsComboBox UserForm:UserForm1(包含单个按钮CommandButton1) 我正在尝试用我动态创建的每个新combobox来覆盖combobox\u change事件。但是,代码不起作用。当在组合框上选择“2”时,不会发生任何事情。我做错了什么 工作簿示例: 编辑 蒂姆,谢谢你的回答。我确实需要创建一个可变长度数组来保存我在内存中动态创建的所有组合框。(最初的问题是关于一个组合框,但在我的实际工作表中,我正在运行

我有一个包含以下代码模块的工作簿:

类模块:clsComboBox



UserForm:UserForm1(包含单个按钮CommandButton1)



我正在尝试用我动态创建的每个新combobox来覆盖combobox\u change事件。但是,代码不起作用。当在组合框上选择“2”时,不会发生任何事情。我做错了什么

工作簿示例:

编辑

蒂姆,谢谢你的回答。我确实需要创建一个可变长度数组来保存我在内存中动态创建的所有组合框。(最初的问题是关于一个组合框,但在我的实际工作表中,我正在运行时创建一个未知的数字)


这需要是一个全局变量:在当前代码中,
CommandButton1\u单击
退出时,它就会超出范围。如果您想捕获以后的事件,它需要保持不变。

正如Tim所说的那样-只需移动一行代码:

Option Explicit
Dim clsobject As clsComboBox  

Private Sub CommandButton1_Click()  

    Dim ctlcombobox As ComboBox  

    Set ctlcombobox = Me.Controls.Add("Forms.ComboBox.1", "ComboBox1", True)  
    Set clsobject = New clsComboBox  
    Set clsobject.cmboControl = ctlcombobox  
    With ctlcombobox  
        .Top = 100  
        .Left = 5  
        .Width = 200  
        .Height = 25  
        .Visible = True  
        .List = Array("1", "2")  
    End With  
End Sub

我很确定这会修复我的用户表单,我会在周二回去工作时告诉你(家里的电脑上没有办公室)。另一方面,如果我创建一个userform类型的可变长度数组,这会让我处理我动态创建的多个userforms吗?
Option Explicit

Private Sub CommandButton1_Click()  

    Dim ctlcombobox As ComboBox  
    Dim clsobject As clsComboBox  

    Set ctlcombobox = Me.Controls.Add("Forms.ComboBox.1", "ComboBox1", True)  
    Set clsobject = New clsComboBox  
    Set clsobject.cmboControl = ctlcombobox  
    With ctlcombobox  
        .Top = 100  
        .Left = 5  
        .Width = 200  
        .Height = 25  
        .Visible = True  
        .List = Array("1", "2")  
    End With  
End Sub  
 Dim clsobject As clsComboBox
Option Explicit
Dim clsobject As clsComboBox  

Private Sub CommandButton1_Click()  

    Dim ctlcombobox As ComboBox  

    Set ctlcombobox = Me.Controls.Add("Forms.ComboBox.1", "ComboBox1", True)  
    Set clsobject = New clsComboBox  
    Set clsobject.cmboControl = ctlcombobox  
    With ctlcombobox  
        .Top = 100  
        .Left = 5  
        .Width = 200  
        .Height = 25  
        .Visible = True  
        .List = Array("1", "2")  
    End With  
End Sub