2016-06-02 10 views
0

Ich versuche, Daten aus einer Datenbank zu lesen, um sie in einer Listbox anzuzeigen.So geben Sie das gesuchte Ergebnis an die Textbox zurück, indem Sie auf den Listenfeldeintrag klicken

Ich habe textboxs und comboboxs: txtIndex, txtEventID, cmbServer, cmbCompany, txtMessage ...

Wenn ich auf "Liste anzeigen" klicken, werden alle Daten aus Datenblatt wird in listbox gelesen und ausgefüllt werden. Nach dem Klicken auf den Listbox-Zeileneintrag werden alle zugehörigen Informationen in entsprechenden Textboxen und Comboboxen für diesen Fall angezeigt.

Ich benutze FindAll-Funktion, um die Suchmaschine zu implementieren und das Suchergebnis scheint in Ordnung zu sein.

Problem ist: Wenn ich auf gesuchtes Ergebnis in ListBox klicken, Daten, die in textboxs und comboboxs nicht korrekt angezeigt wird, ist.

Es folgt Liste Index, nicht was ich will.

Dies ist mein Code zum Anzeigen von Daten (gehandhabt durch UserForm1_Click())

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 

Das Ergebnis ist nicht korrekt. Ich möchte genau verbundene Daten zu ausgewählten Elementen in Textfeldern & Comboboxen anzeigen, aber wenn ich gesucht Ergebnis (in der ersten Zeile angezeigt), zeigte Useform 1 Zeile Daten in Blatt, nicht durchsucht Ergebnis.

Das Problem ist im beigefügten Bild gezeigt.

enter image description here

+0

Verstehe ich Sie richtig? Die erste Zeile Ihres Datenblatts hat die Werte "Index", "Event ID" usw. als Spaltentitel. Dann wird das Formular mit diesen anstelle der relevanten Zeile gefüllt, d. H. "StrAddress" ist immer 1? – arcadeprecinct

+0

Hallo Arcadeprecinct, ja, du hast Recht. Meine erste Zeile zeigt den Spaltentitel. – Holmes

Antwort

1

zunächst einmal sollten Sie kein UserForm1_Click() Ereignis verwenden, um Daten anzuzeigen, lieber ein SomeButton_Click Ereignis tun es

dann müssen Sie ein ListBox1_Click Ereignis-Handle Userform Kontrollen nach Auswahl einer erfrischenden haben ListBox1 Artikel wie folgt:

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 

bitte halte ich fast blind Codierung bin so müssen Sie ein dapt es zu Ihrer tatsächlichen Daten und Kontrollstruktur

+0

Hallo User3598756, vielen Dank für Ihre schnelle Antwort. Das ist ein toller Kommentar und ich habe es sehr geschätzt. Ich habe deinen Code bereits getestet. Es hat gut funktioniert, als ich versuchte, durch einige Bedingungen im Suchfeld zu suchen. Im Fall von "Show list" Button, "Add new" Record, "Delete" & "Update" scheint das listbox_click() Event jedoch nicht korrekt zu funktionieren. Das ausgewählte Element in der Listbox stimmt nicht mit dem entsprechenden Datensatz im DATENBLATT überein. Ich habe meinen vollständigen Code hier angehängt und könntest du mir bitte noch ein paar Hinweise geben? Nochmals vielen Dank für Ihre Aufmerksamkeit. – Holmes

+0

Vielen Dank. Ich habe meinen Code basierend auf dem geändert, was Sie angedeutet haben. Es hat perfekt funktioniert. :) – Holmes

+0

Sie sind willkommen. bitte dann meine Antwort als akzeptiert markieren, danke. – user3598756

Verwandte Themen