VBA Excel用户表单错误1004

VBA Excel用户表单错误1004,vba,excel,combobox,Vba,Excel,Combobox,我正在创建一个用户表单来更新公司数据。我表单中的第一个控件是一个组合框(代码),其余的是文本框。现在我需要使用vlookup来查找我的第一个控件,文本框的其余部分将自动更新为我在组合框中输入的代码。但系统显示错误1004。有人能帮我吗?下面是我的组合框代码: Private Sub ComboBox_code_AfterUpdate() 'check if value exist If WorksheetFunction.CountIf(Sheet1.Range("A:A"),

我正在创建一个用户表单来更新公司数据。我表单中的第一个控件是一个组合框(代码),其余的是文本框。现在我需要使用vlookup来查找我的第一个控件,文本框的其余部分将自动更新为我在组合框中输入的代码。但系统显示错误1004。有人能帮我吗?下面是我的组合框代码:

Private Sub ComboBox_code_AfterUpdate()
    'check if value exist
    If WorksheetFunction.CountIf(Sheet1.Range("A:A"), Me.ComboBox_code.Value) = 0 Then
        MsgBox "Incorrect Code"
        Me.ComboBox_code.Value = ""
        Exit Sub

    End If
'lookup value based on first combobox
    With Me
        .TextBox_outlet = Application.WorksheetFunction.VLookup((Me.ComboBox_code), Sheet1.Range("Code"), 2, 0)
        .TextBox_invoice = Application.WorksheetFunction.VLookup((Me.ComboBox_code), Sheet1.Range("Code"), 3, 0)
        .TextBox_sales = Application.WorksheetFunction.VLookup((Me.ComboBox_code), Sheet1.Range("Code"), 4, 0)
        .TextBox_comm = Application.WorksheetFunction.VLookup((Me.ComboBox_code), Sheet1.Range("Code"), 5, 0)
        .TextBox_gst = Application.WorksheetFunction.VLookup((Me.ComboBox_code), Sheet1.Range("Code"), 6, 0)
        .TextBox_netsales = Application.WorksheetFunction.VLookup((Me.ComboBox_code), Sheet1.Range("Code"), 7, 0)
    End With
End Sub 

ComboBox.Value
给出所选索引,但您可以使用


您还应该测试用户选择的任何实际组合框值

Select Case
块可能是合适的:

Private Sub ComboBox_code_AfterUpdate()
    Dim codeRow As Long
    Dim codeRng As Range

    Set codeRng = Sheet1.Range("Code")
    With Me
        Select Case True

            'check if user selected a value
            Case .ComboBox_code.ListIndex = -1
                MsgBox "No Code selected!", vbCritical
                .ComboBox_code.Value = ""

            'check if value exist
            Case WorksheetFunction.CountIf(codeRng.Resize(, 1), .ComboBox_code.Value) = 0
                MsgBox "Incorrect Code", vbCritical
                .ComboBox_code.Value = ""

            Case Else
                codeRow = WorksheetFunction.Match(.ComboBox_code.Value, Sheet1.Range("Code"), 0) 'lookup value based on first combobox
                .TextBox_outlet = codeRng.cells(codeRow, 2)
                .TextBox_invoice = codeRng.cells(codeRow, 3)
                .TextBox_sales = codeRng.cells(codeRow, 4)
                .TextBox_comm = codeRng.cells(codeRow, 5)
                .TextBox_gst = codeRng.cells(codeRow, 6)
                .TextBox_netsales = codeRng.cells(codeRow, 7)
        End Select
    End With
End Sub

最后,您可能还希望使用
ComboBox\u code\u Change()
事件处理程序,而不是
ComboBox\u code\u AfterUpdate()
:前者将在每次组合框更改(即选择)时触发当combobox不再是活动控件时,后者才会触发,即您必须等待用户离开控件

@Janice,您成功了吗?@Janice,有机会从您那里获得反馈吗?
Private Sub ComboBox_code_AfterUpdate()
    Dim codeRow As Long
    Dim codeRng As Range

    Set codeRng = Sheet1.Range("Code")
    With Me
        Select Case True

            'check if user selected a value
            Case .ComboBox_code.ListIndex = -1
                MsgBox "No Code selected!", vbCritical
                .ComboBox_code.Value = ""

            'check if value exist
            Case WorksheetFunction.CountIf(codeRng.Resize(, 1), .ComboBox_code.Value) = 0
                MsgBox "Incorrect Code", vbCritical
                .ComboBox_code.Value = ""

            Case Else
                codeRow = WorksheetFunction.Match(.ComboBox_code.Value, Sheet1.Range("Code"), 0) 'lookup value based on first combobox
                .TextBox_outlet = codeRng.cells(codeRow, 2)
                .TextBox_invoice = codeRng.cells(codeRow, 3)
                .TextBox_sales = codeRng.cells(codeRow, 4)
                .TextBox_comm = codeRng.cells(codeRow, 5)
                .TextBox_gst = codeRng.cells(codeRow, 6)
                .TextBox_netsales = codeRng.cells(codeRow, 7)
        End Select
    End With
End Sub