excel 未触发用户表单中组合框的更改事件

oxalkeyp  于 2023-01-27  发布在  其他
关注(0)|答案(1)|浏览(105)

我有一个用户表单,上面有一个单击按钮。单击此按钮时,会动态创建一个组合框。当从此组合框中选择特定值时,我想做一些事情,但没有触发更改事件。可能是什么原因。以下是我放在UserForm1模块中的代码。

Private WithEvents ComboBox1 As MSForms.ComboBox

Private Sub ClickButton_Click()
      
    'Create  combo box
    Dim ComboBox1 As MSForms.ComboBox
    Set ComboBox1 = Me.Controls.Add("Forms.ComboBox.1")
    With ComboBox1
        .Left = 160
        .Top = 50
        .Width = 70
        .Height = 20
        .AddItem ("> than")
        .AddItem ("< than")
        .AddItem ("Max")
        .AddItem ("Min")
        .Enabled = True
        .BackColor = RGB(255, 255, 255)
        .ForeColor = RGB(0, 0, 0)
        .SpecialEffect = fmSpecialEffectFlat
        .Font.Size = 12
        .Font.Bold = False
        .Font.Name = "Arial"
        .TabIndex = 2
    End With
        
    DoEvents
    ComboBox1.SetFocus
      
End Sub

Private Sub ComboBox1_Change()
    Dim inputNumber As Variant
    If ComboBox1.Value = "> than" Then
        inputNumber = InputBox("Enter a number:")
        'Check if the input is valid number
        If IsNumeric(inputNumber) Then
            ComboBox1.Value = ComboBox2.Value & " " & inputNumber
        Else
            MsgBox "Invalid input"
        End If
    End If
End Sub
toiithl6

toiithl61#

您需要使用的方法如下所述:https://stackoverflow.com/a/8986622/9852011,但对于您的特定情况,您需要执行以下操作:

这是应该在用户窗体模块中的代码:

Private m_oCollectionOfEventHandlers As Collection

Private Sub UserForm_Initialize()
    Set m_oCollectionOfEventHandlers = New Collection
End Sub

Private Sub CommandButton1_Click()
    Dim ComboBox1 As MSForms.ComboBox
    Set ComboBox1 = Me.Controls.Add("Forms.ComboBox.1")
    With ComboBox1
        .Left = 160
        .Top = 50
        .Width = 70
        .Height = 20
        .AddItem ("> than")
        .AddItem ("< than")
        .AddItem ("Max")
        .AddItem ("Min")
        .Enabled = True
        .BackColor = RGB(255, 255, 255)
        .ForeColor = RGB(0, 0, 0)
        .SpecialEffect = fmSpecialEffectFlat
        .Font.Size = 12
        .Font.Bold = False
        .Font.Name = "Arial"
        .TabIndex = 2
    End With
        
    DoEvents
    ComboBox1.SetFocus
    
    Dim cb1EventHandler As comboboxeventhandler
    Set cb1EventHandler = New comboboxeventhandler
    Set cb1EventHandler.ComboBox = ComboBox1
    m_oCollectionOfEventHandlers.Add cb1EventHandler
      
End Sub

然后,在项目中插入一个新的类模块,将其命名为“ComboBoxEventHandler”,并将以下代码放入其中:

Private WithEvents m_oComboBox As MSForms.ComboBox

Public Property Set ComboBox(ByVal oComboBox As MSForms.ComboBox)
    Set m_oComboBox = oComboBox
End Property

Private Sub m_oComboBox_Change()
    Dim inputNumber As Variant
    With m_oComboBox
        If .Value = "> than" Then
            inputNumber = InputBox("Enter a number:")
            'Check if the input is valid number
            If IsNumeric(inputNumber) Then
                .Value = .Parent.ComboBox2.Value & " " & inputNumber
            Else
                MsgBox "Invalid input"
            End If
        End If
    End With
End Sub

我不知道“ComboBox2”是什么,但是为了这个例子,我假设它是一个已经存在于UserForm中的ComboBox。

相关问题