【发布时间】:2017-09-29 13:48:23
【问题描述】:
大家好,我有以下 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
第一类:
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
将上面的代码用于组合框时,工作得很好。但是,一旦我到达该数组中的 文本框,它就不会弹出 msgbox。
我猜这可能与该框的数组编号有关,因为它可能正在寻找 0 而不是数组中的任何数字 6所以它从 6 而不是 0 开始,因为它是它看到的数组中的第一个文本框。
我该怎么做才能让它们在同一个数组中工作?
【问题讨论】:
-
textboxBox,真的吗? ;-) FWIW 我会使用If TypeOf controller(i) Is MSForms.TextBox而不是字符串类型的TypeName检查。我想我们可能需要看看controller数组是如何填充的。