2016-06-02 18 views
0

リストボックスに表示するデータをデータベースから読み取ろうとしています。 リストボックスの項目をクリックして検索結果をテキストボックスに戻す方法

私は "表示リスト" ボタンをクリックし

、データシートからすべてのデータを読み込み、リストボックスに移入されますtxtIndex、txtEventID、cmbServer、cmbCompany、txtMessage ...:

は私がtextboxsとcomboboxsを持っています。リストボックスの行項目をクリックすると、関連するすべての情報が対応するテキストボックスに表示され、この場合はのコンボボックスが表示されます。

私はFindAll関数を使用して検索エンジンを実装しています。検索結果はOKです。

問題::リストボックスの検索結果をクリックすると、テキストボックスとコンボボックスに表示されるデータが正しくありません。

これは、私が欲しいものではなく、インデックスを一覧表示するためのものです。

これは、結果が正しくない

Private Sub Listbox1_Click() 

Dim strAddress As String 
Dim idx As Long 

' idx = ListBox1.ListIndex + 1 

For idx = 0 To ListBox1.ListCount 
    If ListBox1.Selected(idx) = True Then 
     strAddress = ListBox1.ListIndex + 1 

     UserForm1.txIndex.Value = Sheets("DATA").Range("A" & strAddress).Value 
     UserForm1.txtEventID.Value = Sheets("DATA").Range("B" & strAddress).Value 
     UserForm1.txtSource.Value = Sheets("DATA").Range("C" & strAddress).Value 
     UserForm1.cmbServer.Value = Sheets("DATA").Range("D" & strAddress).Value 
     UserForm1.txtMessage.Value = Sheets("DATA").Range("E" & strAddress).Value 
     UserForm1.cmbStatus.Value = Sheets("DATA").Range("F" & strAddress).Value 
     UserForm1.txtDate.Value = Sheets("DATA").Range("G" & strAddress).Value 
     UserForm1.txtDate.Text = VBA.Format(txtDate, "yyyy.mm.dd") 

     UserForm1.txtIssueNo.Value = Sheets("DATA").Range("H" & strAddress).Value 
     UserForm1.cmbCompany.Value = Sheets("DATA").Range("I" & strAddress).Value 
     UserForm1.txtErrorType.Value = Sheets("DATA").Range("J" & strAddress).Value 
     UserForm1.cmbPriority.Value = Sheets("DATA").Range("K" & strAddress).Value 
     UserForm1.txtComment.Value = Sheets("DATA").Range("L" & strAddress).Value 
     UserForm1.txtName.Value = Sheets("DATA").Range("M" & strAddress).Value 

     GoTo EndLoop 
'  UserForm1.Show 
    End If 
Next idx 

EndLoop: 
Application.ScreenUpdating = True 
Label25.Caption = "You're looking for event id: " & txtEventID.Text 

End Sub 

()UserForm1_Click(によって処理)データを表示するための私のコードです。テキストボックス&のコンボボックスに、選択した項目に関連するデータを正確に表示したいのですが、検索結果(1行目に表示)を選択すると、1行のデータがシートに表示されます。

問題は添付の画像に示されています。最初

enter image description here

+0

私はあなたを正しく理解していますか?データシートの最初の行には、列タイトルとして「索引」、「イベントID」などの値があります。そして、フォームは関連する行の代わりにこれらで埋められます。つまり、 'strAddress'は常に1ですか? – arcadeprecinct

+0

こんにちはarcadeprecinct、はい、あなたは正しいです。最初の行に列のタイトルが表示されます。 – Holmes

答えて

1

オフ、あなたはむしろSomeButton_Clickイベントを持って、データを表示するUserForm1_Click()イベントを使うべきではありません

それを行う、あなたはいずれかの選択後にリフレッシュListBox1_Clickイベントハンドルのユーザーフォームのコントロールを持っている必要があります が好きListBox1項目は次のとおりです。

Option Explicit 

Private Sub Listbox1_Click() 
    Dim strAddress As Long 
    Dim dataSht As Worksheet 

    With Me 
     If .ListBox1.ListIndex <> -1 Then 
      Set dataSht = Sheets("DATA") 
      strAddress = GetEventIDRow(.ListBox1.List(.ListBox1.ListIndex, 1), dataSht.Columns("B")) '<~~ GetEventIDRow returns "Data" sheet row corresponding to the selected EventID, which is got from the 2nd column of the selected ListBox row 

      .txIndex.Value = dataSht.Range("A" & strAddress).Value 
      .txtEventID.Value = dataSht.Range("B" & strAddress).Value 
      .txtSource.Value = dataSht.Range("C" & strAddress).Value 
      .cmbServer.Value = dataSht.Range("D" & strAddress).Value 
      .txtMessage.Value = dataSht.Range("E" & strAddress).Value 
      .cmbStatus.Value = dataSht.Range("F" & strAddress).Value 
      .txtDate.Value = dataSht.Range("G" & strAddress).Value 
      .txtDate.Text = VBA.Format(txtDate, "yyyy.mm.dd") 

      .txtIssueNo.Value = dataSht.Range("H" & strAddress).Value 
      .cmbCompany.Value = dataSht.Range("I" & strAddress).Value 
      .txtErrorType.Value = dataSht.Range("J" & strAddress).Value 
      .cmbPriority.Value = dataSht.Range("K" & strAddress).Value 
      .txtComment.Value = dataSht.Range("L" & strAddress).Value 
      .txtName.Value = dataSht.Range("M" & strAddress).Value 
     End If 
    End With 
End Sub 

Function GetEventIDRow(EventID As Long, rng As Range) As Long 
    GetEventIDRow = rng.Find(What:=EventID, LookAt:=xlWhole, LookIn:=xlValues).Row 
End Function 

は私がほぼ盲目のコーディングだとお考えください、あなた必要がありますので、あなたの実際のデータと制御構造に書き込んでください

+0

こんにちはUser3598756、ご返信ありがとうございます。これは素晴らしいコメントであり、私は非常に感謝しています。私はすでにあなたのコードをテストしました。私は検索ボックスでいくつかの条件でレコードを検索しようとしたときにうまくいきました。しかし、 "Show list"ボタン、 "Add New"レコード、 "Delete"& "Update"の場合、listbox_click()イベントが正しく動作しないようです。リストボックス内の選択された項目が、データシートの対応するレコードと一致しません。私はここに完全なコードを添付して、あなたに私にいくつかのヒントを教えてもらえますか?もう一度、あなたの注意をそんなにありがとう。 – Holmes

+0

ありがとうございます。私は、あなたが示唆したことに基づいてコードを修正しました。それは完璧に働いた。 :) – Holmes

+0

ようこそ。私の答えを受け入れるようにマークしてください、ありがとうございます。 – user3598756