组合框和文本框的VBA动态数组单击事件

问题描述:

嘿,我有以下的VBA代码,允许我在动态创建的组合框和文本框上的点击事件到用户窗体上。组合框和文本框的VBA动态数组单击事件

窗体:

Option Explicit 

Dim comboboxBoxColct As New Collection 
Dim textboxBoxColct As New Collection 

Private Sub UserForm_Activate() 
Dim comboboxEvent As Class1 
Dim textboxEvent As Class1 

    '..lots more code within here 

    If LCase(TypeName(controller(i))) = "combobox" Then 
     Set comboboxEvent = New Class1 
     Set comboboxEvent.comboboxBox = controller(i) 
     comboboxBoxColct.Add comboboxEvent 
    ElseIf LCase(TypeName(controller(i))) = "textbox" Then 
     Set textboxEvent = New Class1 
     Set textboxEvent.textboxBox = controller(i) 
     textboxBoxColct.Add textboxEvent 
    End If 
End Sub 

的Class1:

Option Explicit 

Public WithEvents comboboxBox As MSForms.ComboBox 
Public WithEvents textboxBox As MSForms.TextBox 

Private Sub comboboxBox_Click() 
    MsgBox "worked" 
End Sub 

Private Sub textboxBox_Click() 
    MsgBox "worked" 
End Sub 

enter image description here

上面的代码作品使用它为组合框时就好。但是,一旦我得到文本框它从来没有msgbox弹出。

我猜测它可能会,因为它可能会寻找一个,而不是任何的数量是数组中所以它的起点在,而不是有那箱的序列号做因为它是第一个看到的数组文本。

我能做些什么才能让他们在同一个阵列中工作?

+1

'textboxBox',真的吗? ;-) FWIW我会使用'如果TypeOf控制器(i)是MSForms.TextBox'而不是字符串型'TypeName'检查。我想我们可能需要看看'controller'数组是如何填充的。 –

呜呜......似乎在VBA一个文本框没有一个Click事件,所以当我改变了它,而不是处理Change(没有双关语意)事件,它表明弹出,如果我键入一个字母到文本框中。

Private Sub textboxBox_Change() 'was textboxBox_Click() 
    MsgBox "worked" 
End Sub 
+0

啊废话,我想说,然后移动到另一个标签,并忘记了! –

+0

根据您使用的更改,最好使用'TextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)'。例如:当用户需要在文本框上键入内容并且文本被改变时,所以他不能写全文并且文本被改变 – danieltakeshi