Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1720to1724
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

ListBox nächsten Wert suchen

ListBox nächsten Wert suchen
13.11.2019 09:10:11
Matthias
Guten Morgen,
ich habe eine Userform mit einer ListBox. Weiterhin habe ich ein Suchfeld (TextBox) mit dem ich einen Begriff oder Teile davon in der ListBox suchen und auswählen lassen kann. Das funktioniert auch soweit ganz gut.
Folgendes würde ich gerne umsetzen:
Die Suche findet immer zuerst den letzen Wert in der ListBox, ich würde gerne beim ersten starten.
Über zwei Commandbutton für letzten Wert suchen und nächsten Wert suchen, würde ich gerne durch alle Werte nacheinander (immer nur einer, kein MultiSelect) wechseln können.
Ich habe bereits eine Variante mit einer MsgBox gefunden die dann immer weiter sucht, ich würde aber gerne nur per Klick auf den Commandbutton arbeiten. Der Code sieht bisher wie folgt aus.
Für das Suchfeld (es gibt noch einen Hinweis, falls die ListBox leer ist):
Private Sub TextBoxSuche_Change()
If ListBox1.ListCount = 0 Then
MsgBox "Tabelle ist leer, bitte Auswahl treffen."
Else
Call Suche
End If
End Sub

Für den Weitersuchbutton (soll dann auch noch einen Rückwärtssuchbutton geben)
Private Sub CommandButtonForward_Click()
If ListBox1.ListCount = 0 Then
MsgBox "Tabelle ist leer, bitte Auswahl treffen."
Else
Call SucheWeiter
End If
End Sub

Das Sub für die initiale Suche funktioniert wunderbar sobald ich was ins Feld eingebe, nur sucht es eben den letzten und nicht den ersten Wert zuerst:
Private Sub Suche()
Dim i As Integer, ii As Integer
Dim vntList, strTxt As String, arrSelected()
strTxt = LCase(TextBoxSuche)
vntList = ListBox1.List
ReDim arrSelected(ListBox1.ListCount - 1)
For i = 0 To ListBox1.ListCount - 1
For ii = 0 To ListBox1.ColumnCount - 1
arrSelected(i) = InStr(LCase(vntList(i, ii)), strTxt) > 0
If arrSelected(i) Then Exit For
Next
Next
With ListBox1
For i = 0 To .ListCount - 1
.Selected(i) = arrSelected(i)
Next
End With
End Sub

Das Sub für die Weiter Suche nur über die MsgBox und nicht über den Commandbutton, die blaue Markierung soll nach jedem Klick einfach weiter (oder dann eben auch zurück) zum nächsten Wert springen:
Private Sub SucheWeiter()
Dim Suchbegriff As String
Dim arr
Dim Z As Long
Dim S As Integer
Dim Start As Long
Suchbegriff = TextBoxSuche.Text
arr = ListBox1.List
Start = 0
For Z = Start To UBound(arr)
For S = 0 To UBound(arr, 2)
If arr(Z, S) Like "*" & Suchbegriff & "*" Then
Start = Z + 1
'If MsgBox(arr(Z, S) & " " & Z, vbYesNo, "Weitersuchen ?") = vbNo Then Exit Sub
ListBox1.ListIndex = Z
Exit For
End If
Next
Next
End Sub

Wäre super, wenn ich hier nochmal Hilfe bekommen könnte. Dankeschön.

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

Betreff
Datum
Anwender
Anzeige
AW: ListBox nächsten Wert suchen
13.11.2019 11:05:49
fcs
Hallo Mathias,
habe deine Makros mal etwas umgestrickt.
Bei Eingaben in der Textbox werden jetzt in einem Modulweiten Array alle Treffer mit Wahr markiert.
beim Vorwärts/rückwärts-Suchen wird jetzt immer der nächste/vorherige Wahr-Wert im Array gesucht und in der Listbox markiert.
LG
Franz
'Code unter dem Userform-Code-Modul
Option Explicit
Private arrSelected() As Boolean 'Array mit True/False für Treffer/nicht Treffer in Zeilen
Private Z As Long                'aktueller Treffer-Index im Array
'Das Sub für die initiale Suche funktioniert wunderbar sobald ich was ins Feld eingebe, _
nur sucht es eben den letzten und nicht den ersten Wert zuerst:
Private Sub Suche()
Dim i As Integer, ii As Integer
Dim vntList, strTxt As String
strTxt = LCase(TextBoxSuche)
vntList = ListBox1.List
ReDim arrSelected(0 To ListBox1.ListCount - 1)
Z = -1
If strTxt  "" Then
For i = 0 To ListBox1.ListCount - 1
For ii = 0 To ListBox1.ColumnCount - 1
arrSelected(i) = InStr(LCase(vntList(i, ii)), strTxt) > 0
If arrSelected(i) = True Then
If Z = -1 Then Z = i '1. Treffer merken
Exit For
End If
Next
Next
End If
With ListBox1
.ListIndex = Z '1. Treffer markieren
End With
End Sub
Private Sub SucheWeiter()
If Z = -1 Then Exit Sub
Do
Z = Z + 1
If Z > UBound(arrSelected) Then Z = 0
If arrSelected(Z) = True Then
Me.ListBox1.ListIndex = Z
Exit Do
End If
Loop
End Sub
Private Sub SucheZurueck()
If Z = -1 Then Exit Sub
Do
Z = Z - 1
If Z = -1 Then Z = UBound(arrSelected)
If arrSelected(Z) = True Then
Me.ListBox1.ListIndex = Z
Exit Do
End If
Loop
End Sub
'Für den Rückwärtssuchbutton
Private Sub CommandButtonBackward_Click()
If Z = -1 Then
MsgBox "Keine Treffer"
Else
Call SucheZurueck
End If
End Sub
'Für den Weitersuchbutton
Private Sub CommandButtonForward_Click()
If Z = -1 Then
MsgBox "Keine Treffer"
Else
Call SucheWeiter
End If
End Sub
Private Sub TextBoxSuche_Change()
If ListBox1.ListCount = 0 Then
MsgBox "Tabelle ist leer, bitte Auswahl treffen."
Else
Call Suche
End If
End Sub

Anzeige
AW: ListBox nächsten Wert suchen
13.11.2019 11:36:33
Matthias
Moin Franz,
super Sache. Funktioniert 1A. Ich danke dir sehr.
Gruß Matthias
wenn gelöst bitte nicht als offen markieren. o.w.T
13.11.2019 11:51:48
Werner

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige