Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema CheckBox
BildScreenshot zu CheckBox CheckBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Userform
BildScreenshot zu Userform Userform-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema Label
BildScreenshot zu Label Label-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema ListBox
BildScreenshot zu ListBox ListBox-Seite mit Beispielarbeitsmappe aufrufen
Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Userform - Listbox durchsuchen


Betrifft: Userform - Listbox durchsuchen von: Marina
Geschrieben am: 13.08.2019 09:11:58

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

  

Betrifft: AW: Userform - Listbox durchsuchen von: Torsten
Geschrieben am: 13.08.2019 09:52:05

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


  

Betrifft: AW: Userform - Listbox durchsuchen von: Daniel
Geschrieben am: 13.08.2019 10:10:37

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


Beiträge aus dem Excel-Forum zum Thema "Userform - Listbox durchsuchen"