2017-03-01 43 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()イベントハンドラを使用することもできます。前者はコンボボックスの変更が発生するたびに発生します。コンボボックスがアクティブなコントロールではなくなった場合にのみ起動します。つまり、ユーザーがコントロールを終了するまで待つ必要があります。

+0

@ジャニス、あなたはそれを通過しましたか? – user3598756

+0

@Janice、あなたからのフィードバックを得る機会はありますか? – user3598756

関連する問題