【问题标题】:VBA dynamic array of comboboxes and textboxes click event组合框和文本框单击事件的 VBA 动态数组
【发布时间】: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 数组是如何填充的。

标签: arrays vba excel vb6


【解决方案1】:

嗯...似乎 VBA 中的文本框没有 Click 事件,所以当我将其更改为处理 Change(没有双关语)事件时,如果我输入一个字母,它会显示弹出窗口进入文本框。

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

【讨论】:

  • 啊,废话,我想说,然后移到另一个标签,忘记了!
  • 根据您使用的更改,最好使用TextBox_Exit(ByVal Cancel As MSForms.ReturnBoolean)。例如:当用户需要在文本框上输入内容并且文本被更改时,他无法写入全文并且文本被更改
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-16
  • 2023-03-09
  • 1970-01-01
  • 1970-01-01
  • 2020-07-13
  • 1970-01-01
相关资源
最近更新 更多