Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1704to1708
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

Userform - Listbox durchsuchen

Userform - Listbox durchsuchen
13.08.2019 09:11:58
Marina
Hallo zusammen,
Ich habe eine Excel Datenbank die ich mittels VBA Form fülle und pflege.
Nun habe ich ein Textfeld (suchenTextFeld) und Commandbutton (suchenButton)
um die Listbox mit vorhandenen Einträge zu durchsuchen.
Ich möchte im Textfeld ein Wort oder Buchstaben eingeben
und durch klick auf den Commandbutton soll dann die ganze Datenbank Liste
durchsucht und alle Treffer in der Listbox anzeigt werden.
Die suche Funktioniert bereits, jedoch wird mir immer nur ein Treffer
in der Liste angezeigt. Zudem wird nur die erste Spalte durchsucht (Spalte A).
Es sollte jedoch die ganze Liste durchsucht werden.
Das ist mein Code soweit:

Private Sub suchenButton_Click()
Dim LoI As Long
Dim LoZeile As Long
Dim RaFound As Range
Application.ScreenUpdating = False
If suchenTextBox = "" Then
ListBox1.RowSource = "A2:I" & LoLetzte
Else
ListBox1.RowSource = ""
With Worksheets("Datenbank")
Set RaFound = .Columns(1).Find(suchenTextBox & "*", .Range("A1"), , xlWhole, , xlNext)
If Not RaFound Is Nothing Then
For LoI = RaFound.Row To .Columns(1).Find(suchenTextBox & "*", .Range("A65536")
, , xlWhole, ,    _
_
_
xlprevioius).Row
If UCase(Left(.Cells(LoI, 1), Len(suchenTextBox))) = UCase(suchenTextBox) Then
ListBox1.AddItem .Cells(LoI, 1).Text
ListBox1.List(LoZeile, 1) = .Cells(LoI, 2).Text
ListBox1.List(LoZeile, 2) = .Cells(LoI, 3).Text
ListBox1.List(LoZeile, 3) = .Cells(LoI, 4).Text
ListBox1.List(LoZeile, 4) = .Cells(LoI, 5).Text
ListBox1.List(LoZeile, 5) = .Cells(LoI, 6).Text
ListBox1.List(LoZeile, 6) = .Cells(LoI, 7).Text
ListBox1.List(LoZeile, 7) = .Cells(LoI, 8).Text
ListBox1.List(LoZeile, 8) = .Cells(LoI, 9).Text
ListBox1.List(LoZeile, 9) = .Cells(LoI, 10).Text
LoZeile = LoZeile + 1
End If
Next
End If
End With
End If
Set RaFound = Nothing
Application.ScreenUpdating = True
End Sub

Von Michael kam dazu folgender Code:

Private Sub suchenButton_Click()
Dim LoI As Long
Dim LoZeile As Long
Dim temp As Long
Dim RaFound As Range
Application.ScreenUpdating = False
LoZeile = Worksheets("Datenbank").Cells(Worksheets("Datenbank").Rows.Count, 1).End(xlUp).Row
If suchenTextBox = "" Then
listbox1.RowSource = "A2:I" & LoZeile
Else
listbox1.RowSource = ""
With Worksheets("Datenbank")
For zeile = 2 To LoZeile
Set RaFound = .Rows(LoZeile).Find(suchenTextBox & "*", , , xlPart, , xlNext)
If Not RaFound Is Nothing Then
listbox1.AddItem .Cells(LoI, 1).Text
temp = listbox1.ListCount - 1
listbox1.List(temp, 1) = .Cells(zeile, 2).Text
listbox1.List(temp, 2) = .Cells(zeile, 3).Text
listbox1.List(temp, 3) = .Cells(zeile, 4).Text
listbox1.List(temp, 4) = .Cells(zeile, 5).Text
listbox1.List(temp, 5) = .Cells(zeile, 6).Text
listbox1.List(temp, 6) = .Cells(zeile, 7).Text
listbox1.List(temp, 7) = .Cells(zeile, 8).Text
listbox1.List(temp, 8) = .Cells(zeile, 9).Text
listbox1.List(temp, 9) = .Cells(zeile, 10).Text
End If
Next
End With
End If
Set RaFound = Nothing
Application.ScreenUpdating = True
End Sub

Leider hat dieser ebenfalls nicht funktioniert.
Ich danke bereits jetzt für eure Hilfe!!!
Liebe Grüsse
Marina

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform - Listbox durchsuchen
13.08.2019 09:52:05
Torsten
Hallo Marina,
ich wuerde empfehlen, die Listbox zu einer Multiselect Listbox zu machen und diese im Userform_Initialize Ereignis oder mit RowSource zu fuellen, nicht mit dem Suchen Button.
Dann diesen Code in den Suchen Button:

Private Sub suchenButton_Click()
Dim i As Integer, ii As Integer, y As Integer
Dim selcounter As Long
selcounter = 0
Dim vntList, strTxt As String, arrSelected()
strTxt = LCase(suchenTextBox)
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)
If .Selected(i) = True Then
selcounter = selcounter + 1
.ListIndex = i - selcounter + 1
End If
Next
End With
suchenTextBox = ""
End Sub
Gruss Torsten
Anzeige
AW: Userform - Listbox durchsuchen
13.08.2019 10:10:37
Daniel
HI
im Prinzip geht die Suche so:
dim rngZ as range
dim s as long
for each rngZ in Worksheets("Datenbank").UsedRange.Offset(1, 0).Rows
if worksheetfunction.countif(rngZ, "*" & suchenTextbox.Text & "*") > 0 Then
Listbox1.AddItem
for s = 0 to 9
Listbox1.List(Listbox1.Listcount - 1, s) = rngZ.Cells(1, s + 1)
next
end if
next
bedenke, dass du per .AddItem nur maximal 10 Spalten in der Listbox befüllen kannst.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige