【问题标题】:Clear userform sub giving 1004 error due to dynamic combobox由于动态组合框,清除用户表单子给出 1004 错误
【发布时间】:2019-06-28 13:02:11
【问题描述】:

我正在研究客户投诉数据库。我想实现一个用于数据输入的用户表单。

我有一个清除用户表单的按钮。它会清除 ComboBox2 的整个表单 except,其结果取决于 ComboBox1 的选择。

我收到一个 1004 运行时错误,它回调我用于 ComboBox2 的 Match 函数。

Private Sub CommandButton2_Click()
    Clear_Form
End Sub
Sub Clear_Form()
    Me.ComboBox2.Clear
    For Each ctl In Me.Controls
        Select Case TypeName(ctl)
            Case "TextBox"
                ctl.Text = ""
            Case "ComboBox"
                ctl.ListIndex = -1

        End Select
    Next ctl
End Sub
Private Sub UserForm_Activate()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Customer")

    Dim i As Integer
    Me.ComboBox1.Clear
    For i = 1 To Application.WorksheetFunction.CountA(sh.Range("1:1"))
        Me.ComboBox1.AddItem sh.Cells(1, i).Value

    Next i
End Sub
Private Sub ComboBox1_Change()
    Dim sh As Worksheet
    Set sh = ThisWorkbook.Sheets("Customer")
    Dim i As Integer
    Dim n As Integer

    n = Application.WorksheetFunction.Match(Me.ComboBox1.Value, sh.Range("1:1"), 0)
    Me.ComboBox2.Clear
    For i = 2 To Application.WorksheetFunction.CountA(sh.Cells(1, n).EntireColumn)
        Me.ComboBox2.AddItem sh.Cells(i, n).Value
    Next i
End Sub

【问题讨论】:

    标签: excel vba combobox userform


    【解决方案1】:

    您将收到错误消息,因为Clear_Form 清除了组合框,组合框又调用了_Change 事件,而Match 失败,因为组合框中没有值。只需在_Change 事件中添加一行即可。

    Private Sub ComboBox1_Change()
        If ComboBox1.ListIndex = -1 Then Exit Sub '<~~ ADD THIS
    
        Dim sh As Worksheet
        Set sh = ThisWorkbook.Sheets("Customer")
        Dim i As Integer
        Dim n As Integer
    
        n = Application.WorksheetFunction.Match(Me.ComboBox1.Value, sh.Range("1:1"), 0)
    
        Me.ComboBox2.Clear
    
        For i = 2 To Application.WorksheetFunction.CountA(sh.Cells(1, n).EntireColumn)
            Me.ComboBox2.AddItem sh.Cells(i, n).Value
        Next i
    End Sub
    

    【讨论】:

    • 做到了!谢谢!
    • @MushroomGuy 如果这解决了您的问题,请单击旁边的复选标记接受答案,以向未来的读者表明这是一个可行的解决方案。
    猜你喜欢
    • 2018-12-26
    • 2020-10-08
    • 2013-04-02
    • 1970-01-01
    • 2019-08-10
    • 2023-03-26
    • 2012-04-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多