Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Listbox Eintrag wählen u. auf Blatt Zeile anzeigen

Forumthread: Listbox Eintrag wählen u. auf Blatt Zeile anzeigen

Listbox Eintrag wählen u. auf Blatt Zeile anzeigen
20.06.2018 22:28:30
Felix
Hallo liebe Excel Experten,
mit der Hilfe von Werner konnte ich meine Tabelle sehr effektiv verfeiern und habe im allgemeinen bisher sehr viel Hilfe und Input bekommen. Durch viel Nachlesen und probieren habe ich meine Tabelle auch bereits stark erweitern können.
Nun stoße ich jedoch an ein kleines Problem und komme nicht weiter. Mir gehen sogar die Suchbegriffe in Google aus und ich sehe den Wald vor lauter Bäumen nicht mehr.
Ich habe in meiner Tabelle einen Button über den wird eine UserForm aufgerufen. Auf dieser befinden sich eine ListBox, eine TextBox und 3 CommandButton (Suche starten, Suchergebnis anzeigen und Abbrechen).
Die Tabelle reicht von A6:AO20000 und in A5:AO5 stehen die Überschriften.
Die ListBox ist 10 spaltig, damit der User die Suchergebnisse unterscheiden kann.
Der Suchbegriff kann irgendwo im Bereich A6:AO20000 zu finden sein.
Ich soll dass über VBA lösen, da sich viele Kollegen und Kolleginnen wohl von der Excel eigenen Suchfunktion erschlagen fühlen. Ich frage mich zwar warum... aber naja... ich soll es nach Möglichkeit richten. Menschen lassen sich nicht so leicht ändern wie Code... (ein ermutigendes Zitat von meinem Chef).
In die TextBox kann der User einen Suchwert eingeben. In der ListBox werden alle Ergebnisse mit diesem Suchwert ausgegeben.
Soweit funktioniert alles super.
Nun möchte ich dass aber so gestalten, dass wenn eine Zeile in der ListBox ausgewählt und auf den CommandButton "Suchergebnis anzeigen" geklickt, dann genau die Zeile mit dem ausgewähltem Suchergebnis selektiert wird.
Mit meinem bisherigen Code wird mir immer nur dass erste Ergebnis der Listbox angezeigt und die komplette Zeile selektiert. Kommt dass dadurch, dass ich im Anzeigen Button den Suchwert = ListBox1.Value definiere?
Weiß jemand wie ich das realisieren kann bzw. wo mein Fehler oder auch Denkfehler ist?
Ich poste noch meinen bisherigen Coda dazu.
Mit diesem befülle ich die ListBox:
Private Sub cmdSuchen_Click()
Dim s As String
Dim Found As Range
Dim firstaddress As String
Dim i As Integer
On Error Resume Next
i = 0
s = TextBox1.Value
If s = "" Then
MsgBox "Bitte geben Sie einen Suchbegriff ein!", vbExclamation, "Hinweis!"
Exit Sub
End If
ListBox1.Clear
With ActiveSheet
Set Found = .Cells.Find(what:=s, LookAt:=xlPart)
If Not Found Is Nothing Then
firstaddress = Found.Address
ListBox1.ColumnCount = 10
Do
ListBox1.AddItem Found
ListBox1.List(i, 1) = Cells(Found.Row, 3)  'hier habe ich die wichtigen Spalten gewählt
ListBox1.List(i, 2) = Cells(Found.Row, 4)
ListBox1.List(i, 3) = Cells(Found.Row, 5)   ' auf diese Spalte 5 könnte ggf. verzichtet  _
werden
ListBox1.List(i, 4) = Cells(Found.Row, 6)
ListBox1.List(i, 5) = Cells(Found.Row, 7)
ListBox1.List(i, 6) = Cells(Found.Row, 8)
ListBox1.List(i, 7) = Cells(Found.Row, 10)
ListBox1.List(i, 8) = Cells(Found.Row, 11)
ListBox1.List(i, 9) = Cells(Found.Row, 12)
Set Found = Cells.FindNext(after:=Found)
If Found.Address = firstaddress Then Exit Do
i = i + 1
Loop
End If
End With
End Sub

Und mit diesem Soll dass ausgewählte Suchergebnis angezeigt werden:
Es ist nur SingleSelect möglich in der ListBox
Private Sub cmdAnzeigen_Click()
Dim Suchergebnis As Variant
Dim Suchwert As String
Suchergebnis = Empty
If ListBox1.ListIndex >= 0 Then
With ActiveSheet.Range("A6:AO20000")
Suchwert = ListBox1.Value
Set Suchergebnis = .Find(what:=Suchwert, LookIn:=xlValues)
If Not Suchergebnis Is Nothing Then Suchergebnis.Rows.EntireRow.Select Else Exit Sub
End With
Else
MsgBox "Bitte wählen Sie eine Ergebniszeile aus!", vbExclamation, "Hinweis!"
Exit Sub
End If
Unload UserForm8
Set Suchergebnis = Nothing
End Sub

Ich danke Euch vielmals im Voraus für Eure Hilfe und tatkräftige Unterstützung!
Dazu wünsche ich noch einen schönen Abend.
Lieben Gruß
Felix
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Listbox Eintrag wählen u. auf Blatt Zeile anzeigen
21.06.2018 07:50:46
Luschi
Hallo Felix,
warum 2-mal suchen? Nimm in die Lstbox die Zeilennummer des gefundenen Suchbegriffes mit auf und stelle die Breite dieser Spalte der Listbox auf '0cm':
ListBox1.List(i, 1) = Found.Row
Gruß von Luschi
aus klein-Paris
AW: Listbox Eintrag wählen u. auf Blatt Zeile anzeigen
21.06.2018 10:09:23
Felix
Hallo Luschi,
deinen Tipp habe ich umgesetzt. In der ListBox wird jetzt auch die Zeilennummer angezeigt. Ist doch auch ganz praktisch und nützlich für den User.
Nur stelle ich mich momentan zu doof an um genau diese Zeile auf dem Tabellenblatt zu selektieren/ auszuwählen, wenn der User sie in der UserForm ausgewählt hat. Und egal in welche Spalte der ListBox der User klickt, es soll immer die entsprechende Zeile aufgerufen werden.
Ich habe es auch schon im Doppelklick Event der ListBox probiert, allerdings komme ich da über die MessageBox, die mir die Zeile zu Testzwecken anzeigt nicht hinaus.
Das habe ich im Doppelclick Event erfasst:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
MsgBox "Ergebnis gefunden in folgender Zeile: " & ListBox1.List(ListBox1.ListIndex, 1), _  _
vbInformation + vbOKOnly, "Fund"
End Sub
Vielen Dank für deinen Tipp Luschi. Vielleicht kannst du mir ja nochmal einen Denkanstoß geben.
LG
Felix
Anzeige
AW: Listbox Eintrag wählen u. auf Blatt Zeile anzeigen
21.06.2018 18:36:31
Felix
Hallo Luschi,
jetzt habe ich mich nochmal hinein gekniet und meinen ganzen Grips zusammen genommen und es hat geklappt.
Ich habe es jetzt wie folgt gelöst:
Dim ws As Worksheet
Dim Zeile As Long
Set ws = ActiveSheet
Dim SelectedItem As String
If Me.ListBox1.ListIndex -1 Then
SelectedItem = Me.ListBox1.List(Me.ListBox1.ListIndex)
Zeile = Me.ListBox1.List(Me.ListBox1.ListIndex, 1)
Zeile = ws.Rows(Zeile).EntireRow.Select
End If
Unload UserForm8
Danke dir für deinen Input.
LG
Felix
Anzeige
Anzeige

Infobox / Tutorial

Listbox Einträge in Excel auswählen und Zeilen anzeigen


Schritt-für-Schritt-Anleitung

  1. UserForm erstellen: Erstelle eine UserForm mit einer ListBox, einer TextBox und drei CommandButtons (Suche starten, Suchergebnis anzeigen, Abbrechen).

  2. ListBox konfigurieren: Setze die ColumnCount der ListBox auf 10, um die Suchergebnisse übersichtlich darzustellen.

  3. Suchfunktion implementieren:

    • Verwende den folgenden VBA-Code, um die ListBox mit Suchergebnissen zu befüllen:
      Private Sub cmdSuchen_Click()
      Dim s As String
      Dim Found As Range
      Dim firstaddress As String
      Dim i As Integer
      On Error Resume Next
      i = 0
      s = TextBox1.Value
      If s = "" Then
         MsgBox "Bitte geben Sie einen Suchbegriff ein!", vbExclamation, "Hinweis!"
         Exit Sub
      End If
      ListBox1.Clear
      With ActiveSheet
         Set Found = .Cells.Find(what:=s, LookAt:=xlPart)
         If Not Found Is Nothing Then
             firstaddress = Found.Address
             ListBox1.ColumnCount = 10
             Do
                 ListBox1.AddItem Found
                 ListBox1.List(i, 1) = Found.Row
                 ' weitere Spalten hier hinzufügen
                 Set Found = Cells.FindNext(after:=Found)
                 If Found.Address = firstaddress Then Exit Do
                 i = i + 1
             Loop
         End If
      End With
      End Sub
  4. Suchergebnis anzeigen: Implementiere den Code für den CommandButton „Suchergebnis anzeigen“:

    Private Sub cmdAnzeigen_Click()
       Dim ws As Worksheet
       Dim Zeile As Long
       Set ws = ActiveSheet
       If ListBox1.ListIndex >= 0 Then
           Zeile = ListBox1.List(ListBox1.ListIndex, 1)
           ws.Rows(Zeile).EntireRow.Select
       Else
           MsgBox "Bitte wählen Sie eine Ergebniszeile aus!", vbExclamation, "Hinweis!"
       End If
       Unload UserForm8
    End Sub

Häufige Fehler und Lösungen

  • Problem: Die Zeile wird nicht korrekt selektiert.

    • Lösung: Stelle sicher, dass die Zeilennummer korrekt in der ListBox gespeichert ist. Nutze ListBox1.List(i, 1) = Found.Row, um die Zeilennummer zu speichern.
  • Problem: Keine Ergebnisse in der ListBox.

    • Lösung: Überprüfe, ob der Suchbegriff korrekt eingegeben wird und dass er im angegebenen Bereich vorhanden ist.

Alternative Methoden

  • Doppelklick-Ereignis: Du kannst auch das Doppelklick-Ereignis der ListBox nutzen, um die entsprechende Zeile anzuzeigen:

    Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
       Dim Zeile As Long
       Zeile = ListBox1.List(ListBox1.ListIndex, 1)
       ActiveSheet.Rows(Zeile).Select
    End Sub
  • Verwendung von Filter: Statt eine ListBox zu verwenden, könntest du auch Filter in Excel nutzen, um die Sichtbarkeit der Zeilen zu steuern.


Praktische Beispiele

Angenommen, du hast eine Tabelle mit Verkäufen, und du suchst nach einem bestimmten Produkt. Mit der oben beschriebenen UserForm kannst du den Produktnamen in die TextBox eingeben und die entsprechenden Zeilen in der ListBox sehen. Nach Auswahl eines Ergebnisses wird die gesamte Zeile in der Tabelle markiert.


Tipps für Profis

  • Dynamische Anpassung der ListBox: Du kannst die Breite der Spalten in der ListBox dynamisch anpassen, um nur die notwendigen Informationen anzuzeigen und die Übersichtlichkeit zu erhöhen.

  • Fehlerbehandlung verbessern: Implementiere eine umfassendere Fehlerbehandlung, um mögliche Probleme beim Suchen oder Auswählen von Zeilen zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich die ListBox auf mehrere Spalten erweitern? Um die ListBox auf mehrere Spalten zu erweitern, setze ListBox1.ColumnCount entsprechend und füge weitere Werte in den ListBox-Zeilen hinzu.

2. Was mache ich, wenn die Suche nichts findet? Wenn die Suche keinen Treffer ergibt, stelle sicher, dass der Suchbegriff korrekt eingegeben wurde und dass du den richtigen Suchbereich definiert hast.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige