2017-03-01 128 views
0

我正在创建用户表单来更新公司数据。我的表单中的第一个控件是一个组合框(它是代码),其余的都是文本框。现在我需要使用vlookup来查找我的第一个控件,并且文本框的其余部分将自动用我在组合框中输入的代码进行更新。但系统显示错误1004.有人可以帮助我吗?下面是我的组合框代码:VBA Excel用户表单错误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 

回答

0

ComboBox.Value给选定的索引,但您可以用.List(.ListIndex)

Private Sub ComboBox_code_AfterUpdate() 
    Dim c As Range 
    Set c = Sheet1.Range("Code").Resize(, 1).Find(Me.ComboBox_code.List(Me.ComboBox_code.ListIndex), , , xlWhole) 

    If c Is Nothing Then 
     MsgBox "Incorrect Code" 
     Me.ComboBox_code.ListIndex = -1 
    Else 
     Me.TextBox_outlet.Text = c(, 2) 
     Me.TextBox_invoice.Text = c(, 3) 
     Me.TextBox_sales.Text = c(, 4) 
     Me.TextBox_comm.Text = c(, 5) 
     Me.TextBox_gst.Text = c(, 6) 
     Me.TextBox_netsales.Text = c(, 7) 
    End If 
End Sub 
+0

OMG !!!非常感谢!! – Janice

0

你还应该测试用户所做的任何实际组合框的值选择获得所选择的项目

一个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_code_Change()事件处理程序,而不是ComboBox_code_AfterUpdate():前者会在每个组合框更改时触发。选择),而后者只会在组合框不再是主动控件时触发,即您必须等待用户离开控件

+0

@Janice,你通过了吗? – user3598756

+0

@Janice,有没有机会从你那里得到反馈? – user3598756