Listbox nach String der Reihe nach Suchen und markieren (SpinButton)
Hallo zusammen,
folgender Code markiert alle Zeilen einer Listbox, die in irgendeiner Spalte den String einer Textbox enthalten:
Soweit, so gut.
Hätte aber vielleicht jemand einen Tipp,
wie man den Code so in einem SpinButton einbauen kann,
dass durch klicken auf die Pfeile (SpinUp bzw. SpinDown) jeweils immer die nächste (bzw. vorherige) Zeile markiert wird?
Vielen Dank im Voraus
Gruß
folgender Code markiert alle Zeilen einer Listbox, die in irgendeiner Spalte den String einer Textbox enthalten:
Private Sub CommandButton1_Click()
Dim lngRow As Long, lngColumn As Long
Dim strSearchText As String
If Trim$(txt_Suchbegriff.text) <> "" Then
strSearchText = "*" & Trim$(txt_Suchbegriff.text) & "*"
With Listbox1
.MultiSelect = fmMultiSelectMulti
For lngRow = 0 To .ListCount - 1
.Selected(lngRow) = False
For lngColumn = 0 To .ColumnCount - 1
If .List(lngRow, lngColumn) Like strSearchText Then
.Selected(lngRow) = True
Exit For
End If
Next
Next
End With
End If
End Sub
Soweit, so gut.
Hätte aber vielleicht jemand einen Tipp,
wie man den Code so in einem SpinButton einbauen kann,
dass durch klicken auf die Pfeile (SpinUp bzw. SpinDown) jeweils immer die nächste (bzw. vorherige) Zeile markiert wird?
Vielen Dank im Voraus
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 666949
Url: https://administrator.de/forum/listbox-nach-string-der-reihe-nach-suchen-und-markieren-spinbutton-666949.html
Ausgedruckt am: 26.12.2024 um 15:12 Uhr
4 Kommentare
Neuester Kommentar
Servus @mreske,
hier mal ein Beispiel anhand dieser einfachen Test-Form (Namen der Controls in den Blasen):
Und der dazu passende Code der Form (inkl. Kommentaren)
Denke das solltest du anhand der Code-Kommentare an deine Bedürfnisse anpassen können falls nötig.
search_listbox_spin_button_666949.xlsm
Grüße Uwe
hier mal ein Beispiel anhand dieser einfachen Test-Form (Namen der Controls in den Blasen):
Und der dazu passende Code der Form (inkl. Kommentaren)
Option Compare Text
' Ergebnis collection
Dim sResults As New Collection
' aktuelle Position in der Ergebnisliste
Dim sResultsPos As Integer
' Suchen Button click Prozedur
Private Sub btnSearch_Click()
' finde Einträge mit Funktion
Set sResults = FindStringsInListBox(txtSearch.Text)
' Wenn Suche erfolgreich
If sResults.Count <> 0 Then
MsgBox "Ergebnis gefunden in " & sResults.Count & " Zeilen.", vbInformation
' Initiale Position für Ergebnisse festlegen
sResultsPos = 0
' aktiviere SpinButton
sb.Enabled = True
' markiere automatisch das erste Ergebnis
sb_SpinDown
Else ' Suche ergebnislos
' Markierung entfernen
lb.ListIndex = -1
' deaktiviere SpinButton
sb.Enabled = False
MsgBox "Kein Eintrag gefunden!", vbExclamation
End If
End Sub
' SpinUp Button
Private Sub sb_SpinUp()
If sResults.Count = 0 Then Exit Sub
' Position in der Ergebnisliste festlegen
sResultsPos = IIf(sResultsPos > 1, sResultsPos - 1, sResults.Count)
' markiere Ergebnis in Listbox
lb.ListIndex = sResults(sResultsPos)
End Sub
'SpinDown Button
Private Sub sb_SpinDown()
If sResults.Count = 0 Then Exit Sub
' Position in der Ergebnisliste festlegen
sResultsPos = IIf(sResultsPos < sResults.Count, sResultsPos + 1, 1)
' markiere Ergebnis in Listbox
lb.ListIndex = sResults(sResultsPos)
End Sub
' Funktion zum finden von Einträgen in der Listbox
Function FindStringsInListBox(strTerm) As Collection
Dim colRows As New Collection, found As Boolean, r as long, c as Integer
With lb
For r = 0 To .ListCount - 1
found = False
For c = 0 To .ColumnCount - 1
If .List(r, c) Like "*" & strTerm & "*" Then
found = True
End If
Next
If found Then colRows.Add r
Next
End With
Set FindStringsInListBox = colRows
End Function
' bei Textänderung in Suchbox
Private Sub txtSearch_Change()
If txtSearch.Text = "" Then
btnSearch.Enabled = False
Else
btnSearch.Enabled = True
End If
End Sub
Denke das solltest du anhand der Code-Kommentare an deine Bedürfnisse anpassen können falls nötig.
search_listbox_spin_button_666949.xlsm
Grüße Uwe