2017-03-01 126 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