我有一个带有以下代码模块的工作簿:
类模块:clsComboBox
Option Explicit
Private WithEvents MyComboBox As MSForms.ComboBox
Public Property Set cmboControl(cmboBox As MSForms.ComboBox)
Set MyComboBox = cmboBox
End Property
Private Sub MyComboBox_Change()
If MyComboBox.Value = "2" Then
MsgBox "I will be so happy if this ever runs"
End If
End Sub
UserForm: UserForm1(包含单个按钮,CommandButton1)
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
我试图用我在飞行中创建的每个新组合框覆盖combobox_change事件。然而,代码不能工作。当在组合框上选择"2"时,什么也不会发生。我做错了什么?
示例工作簿:https://www.dropbox.com/s/ctr51lote86fbox/test%20combo%20box.xlsm?dl=0
编辑
谢谢你的回答,蒂姆。我必须创建一个变长数组来保存我在内存中动态创建的所有组合框。(原来的问题是关于一个单一的组合框,但在我的实际工作表中,我在运行时创建一个未知的数字)。 Dim clsobject As clsComboBox
这需要是一个全局变量:在您当前的代码中,只要CommandButton1_Click
退出,它就会超出作用域。如果您想要捕获以后的事件,它需要持久化。
就像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