Suche in Listbox

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox MsgBox
Bild

Betrifft: Suche in Listbox
von: Vic
Geschrieben am: 05.10.2015 15:39:31

Hallo an alle,
mit folgendem Code kann ich sehr schön die Listbox1 durchsuchen:

Private Sub BTN_Suche_Click()
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
 For liSuche = 0 To ListBox1.ListCount - 1
    For liSuche1 = 0 To ListBox1.ColumnCount - 1
        If InStr(1, ListBox1.Column(liSuche1, liSuche), TB_Suche.Text) > 0 Then
           ListBox1.ListIndex = liSuche
            liMsg = MsgBox("Weitersuchen?", vbQuestion + vbYesNo)
            If liMsg = vbNo Then Exit Sub
        End If
    Next
 Next
MsgBox "Keine oder keine" & vbCrLf & "weiteren Ergebnisse vorhanden!", vbInformation, "Suche  _
abgeschlossen"
End Sub
Kann das so erweitert werden, dass nur Ergebnisse angezeigt werden, die in Spalte X der Listbox den String "verfügbar" enthalten? Wie immer vielen Dank für die Hilfe!
Vic

Bild

Betrifft: AW: Suche in Listbox
von: Nepumuk
Geschrieben am: 05.10.2015 19:12:03
Hallo,
so?

Private Sub BTN_Suche_Click()
    Dim liSuche As Integer, liSuche1 As Integer
    For liSuche = 0 To ListBox1.ListCount - 1
        For liSuche1 = 0 To ListBox1.ColumnCount - 1
            If InStr(1, ListBox1.Column(liSuche1, liSuche), TB_Suche.Text) > 0 Then
                If ListBox1.Column(liSuche1, X) = "verfügbar" Then 'Hier Spaltennummer eintragen
                    ListBox1.ListIndex = liSuche
                    If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
                End If
            End If
        Next
    Next
    MsgBox "Keine oder keine" & vbLf & "weiteren Ergebnisse vorhanden!", _
        vbInformation, "Suche abgeschlossen"
End Sub

Gruß
Nepumuk

Bild

Betrifft: so gehts leider nicht
von: Vic
Geschrieben am: 06.10.2015 10:40:38
Hallo und Danke Nepumuk. Leider funktioniert es so nicht oder ich mache einen Denkfehler. Spielt es für die Eingabe der Spaltennummer der Listbox eine Rolle, ob sie ausgeblendet sind (über ColumnWidths in der Eigenschaftsbox auf 0 Pt gesetzt)?
Der Code läuft ohne Fehlermeldung durch, bringt allerdings nicht das gewünschte Ergebnis.
Deinem Beispiel folgend habe ich es mal mit

If InStr(1, ListBox1.Column(liSuche1, 6), TB_Suche2.Text) > 0 Then
versucht. Ebenfalls ohne Fehlermeldung - aber eben auch ohne Ergebnis. Er findet nichts und zeigt die MsgBox an.
Vic

Bild

Betrifft: AW: so gehts leider nicht
von: Nepumuk
Geschrieben am: 06.10.2015 10:47:52
Hallo,
die Spaltenbreite spielt keine Rolle. Kannst du mal eine Mustermappe hochladen?
Gruß
Nepumuk

Bild

Betrifft: AW: so gehts leider nicht
von: Vic
Geschrieben am: 06.10.2015 12:13:17
Danke, soweit es ging entschlackt, im Original ist es deutlich umfangreicher. Das Sheet SIM umfasst etwa 3000 Datensätze.
https://www.herber.de/bbs/user/100616.xlsm
Unabhängig voneinander funktioniert die Suche. Sind beide Suchfelder gefüllt, geht es nicht.
Wäre im Grunde auch ok - in diesem Falle muss ich aber weiter eingrenzen können.
Vic

Bild

Betrifft: AW: so gehts leider nicht
von: Nepumuk
Geschrieben am: 06.10.2015 14:46:23
Hallo,
du suchst den 2. Begriff (aus der Combobox) in der selben Spalte wie z.B. den Namen das kann natürlich nicht funktionieren.
Teste mal das:

Private Sub BTN_Sucheverfuegbar_Click()
    Dim liSuche As Integer, liSuche1 As Integer
    For liSuche = 0 To ListBox1.ListCount - 1
        For liSuche1 = 0 To ListBox1.ColumnCount - 1
            If InStr(1, ListBox1.Column(liSuche1, liSuche), TB_Suche.Text) > 0 Then
                If InStr(1, ListBox1.Column(5, liSuche), CB_Suche.Text) > 0 Or CB_Suche.ListIndex = -1 Then
                    ListBox1.ListIndex = liSuche
                    If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
                End If
            End If
        Next
    Next
    MsgBox "Keine oder keine" & vbLf & "weiteren Ergebnisse vorhanden!", _
        vbInformation, "Suche abgeschlossen"
End Sub

Gruß
Nepumuk

Bild

Betrifft: AW: so gehts leider nicht
von: Vic
Geschrieben am: 06.10.2015 15:39:25
Danke für die Mühen Nepomuk!
Wie meinst du das mit der selben Spalte? Ich verstehe es so, das damit

ListBox1.Column(liSuche1, liSuche)

die gesamte Listbox über alle Spalten und Zeilen abgeklappert wird, während mit
ListBox1.Column(5, liSuche)
nur in Spalte 6 gesucht wird. Das wäre genau das, was ich brauche.
Im Ergebnis findet aber auch der Code nicht die entsprechenden Einträge sondern rauscht bei Eingabe in beiden Suchfeldern ohne Fehlermeldung zur MsgBox "Keine oder.... durch.
Lasse ich TB_Suche frei, findet er die Datensätze, arbeitet aber in der next-Schleife die MsgBox("Weitersuchen?",....usw. mehrfach in der selben Zeile (liSuche?) ab.
Gebe ich nur in TB_Suche etwas ein, "findet" er irgendwas, nur hat das nichts mit dem Suchbegriff zu tun. Ich bin komplett ratlos.
Vic

Bild

Betrifft: sorry mein Fehler - Danke geht!
von: Vic
Geschrieben am: 06.10.2015 16:10:59
Vergiss meinen letzten Beitrag, ich habe den falschen Block auskommentiert...
Ergänzt um die Abfrage der Eingabe in TB_Suche funktioniert es nun so wie gewünscht

Private Sub BTN_Suche_Click()
Dim liSuche As Integer, liMsg As Integer, liSuche1 As Integer
If TB_Suche.Text = "" Then
MsgBox "Nichts zum Suchen eingegeben!", vbInformation, "Fehler"
Exit Sub
Else
For liSuche = 0 To ListBox1.ListCount - 1
        For liSuche1 = 0 To ListBox1.ColumnCount - 1
            If InStr(1, ListBox1.Column(liSuche1, liSuche), TB_Suche.Text) > 0 Then
                If InStr(1, ListBox1.Column(5, liSuche), CB_Suche.Text) > 0 Or CB_Suche. _
ListIndex = -1 Then
                    ListBox1.ListIndex = liSuche
                    If MsgBox("Weitersuchen?", vbQuestion + vbYesNo) = vbNo Then Exit Sub
                End If
            End If
        Next
    Next
    MsgBox "Keine oder keine" & vbLf & "weiteren Ergebnisse vorhanden!", _
        vbInformation, "Suche abgeschlossen"
End If
End Sub


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Suche in Listbox"