Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1920to1924
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
Suche über Combo/Textbox in ListBox
17.02.2023 12:26:04
Johanna
Hallo zusammen,
ich habe ein Problem in meiner Userform mit der Suchfunktion.
Aktuell habe ich eine ListBox1 die mir in 14 Spalten die Daten meiner Tabelle anzeigt. Diese Einträge kann ich auch bearbeiten und löschen.
Und jetzt möchte ich eine Kategorie(die Überschrift der Spalte) in einer ComboBox auswählen und dann in einer TextBox in dieser Spalte nach suchen lassen.
Ich bin bereits soweit, dass ich mir die Überschriften der Tabelle in einer DropDown Box auswählen kann und dann soll im Textfeld die Eingabe zur Suche stattfinden. Nach einem tutorial auf Youtube habe ich folgenden Code für die Suchfunktion in der Textbox:
Mein Problem: wenn ich den code laufen lasse, dann wird mir angezeigt, dass die variable a nicht definiert ist. Aber im tutorial wird nicht näher darauf eingegangen und ich weiß nicht wie ich das hier zum laufen bekomme
Private Sub TBSuchen_Change()
On Error Resume Next
If Me.TBSuchen.Text = "" Then
Me.ListBox1.Clear
Exit Sub
End If
Me.ListBox1.Clear
Dim r, last_row As Integer
last_row = shUebersicht.Range("A10000").End(xlUp).Row
For r = 2 To last_row
a = Len(Me.TBSuchen.Text)
If UCase(Left(shUebersicht.Cells(r, kriterium).Value, a)) = UCase(Me.TBSuchen.Text) Then
With Me.ListBox1

.AddItem shUebersicht.Cells(r, "A").Value
.List(.ListCount - 1, 1) = shUebersicht.Cells(r, "B").Value
.List(.ListCount - 1, 2) = shUebersicht.Cells(r, "C").Value
.List(.ListCount - 1, 3) = shUebersicht.Cells(r, "D").Value
.List(.ListCount - 1, 4) = shUebersicht.Cells(r, "E").Value
.List(.ListCount - 1, 5) = shUebersicht.Cells(r, "F").Value
.List(.ListCount - 1, 6) = shUebersicht.Cells(r, "G").Value
.List(.ListCount - 1, 7) = shUebersicht.Cells(r, "H").Value
.List(.ListCount - 1, 8) = shUebersicht.Cells(r, "I").Value
.List(.ListCount - 1, 9) = shUebersicht.Cells(r, "J").Value
.List(.ListCount - 1, 10) = shUebersicht.Cells(r, "K").Value
.List(.ListCount - 1, 11) = shUebersicht.Cells(r, "L").Value
.List(.ListCount - 1, 12) = shUebersicht.Cells(r, "M").Value
.List(.ListCount - 1, 13) = shUebersicht.Cells(r, "N").Value
End With
End If
Next r

End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Suche über Combo/Textbox in ListBox
17.02.2023 13:02:26
ChrisL
Hi
Ohne den Code im Detail zu untersuchen, nachfolgend ein erster Input.
Ich schätze es geht um die Deklaration von Variablen. Grundlagen z.B.
https://www.herber.de/vbabasics/0014.html#Variablendeklaration
Ersetze mal
Dim r, last_row As Integer
durch
Dim r As Long, last_row As Long, a As Long
Zwar würde für die Variable a ein Datentyp Integer vermutlich reichen, aber wir wollen mal nicht geizen und allgemein Typ Long für Ganzzahlen verwenden.
cu
Chris
Anzeige
AW: Suche über Combo/Textbox in ListBox
18.02.2023 21:07:10
Johanna
Hi Chris,
Danke für deine Nachricht! Ich hab das jetzt angepasst und es kommt keine Fehlermeldung mehr. Allerdings passiert nichts wenn ich den Code ausführe und ich hab keine Ahnung was ich jetzt anpassen könnte damit was kommt
LG
AW: Suche über Combo/Textbox in ListBox
19.02.2023 13:46:35
ralf_b
versuch mal das
variablen musst du, sofern nötig, an deine Umgebung anpassen.
Additem kann nur 10 Spalten verarbeiten.
columncount sollte festgelegt werden.
zugriffe auf Tabellenzellen sind zeitaufwändig. deshalb hier eine Lösung mit Arrays.
Private Sub TBSuchen_Change()
    Dim kriterium&
    Dim r&, a&, sSuche$, lrow&, arr, arrRange, cnt&
    Dim shUebersicht As Worksheet
    
    On Error Resume Next            'nimm das raus, sonst siehst du die Fehler nicht.
    If Me.TBSuchen.Text = "" Then
       ' Me.ListBox1.Clear          'unnötig  da 4 Zeilen später diese sowieso gelöscht wird
        Exit Sub
    End If
    
 '   ListBox1.ColumnCount = 13    'das gehört ins Userform_initialize()
     
     Me.ListBox1.Clear
    
    Set shUebersicht = Worksheets("Tabtest")
    kriterium = 3
    sSuche = Me.TBSuchen.Text
    a = Len(sSuche)
    ReDim arr(1 To 13, 1 To 1)
    
    lrow = shUebersicht.Cells(Rows.Count, 1).End(xlUp).Row
    arrRange = shUebersicht.Cells(2, "A").Resize(lrow - 1, 14).Value
    
    For r = LBound(arrRange) To UBound(arrRange)
        If UCase(Left(arrRange(r, kriterium), a)) = UCase(sSuche) Then
            cnt = cnt + 1
            ReDim Preserve arr(1 To 13, 1 To cnt)
               
            arr(1, cnt) = arrRange(r, 1)
            arr(2, cnt) = arrRange(r, 2)
            arr(3, cnt) = arrRange(r, 3)
            arr(4, cnt) = arrRange(r, 4)
            arr(5, cnt) = arrRange(r, 5)
            arr(6, cnt) = arrRange(r, 6)
            arr(7, cnt) = arrRange(r, 7)
            arr(8, cnt) = arrRange(r, 8)
            arr(9, cnt) = arrRange(r, 9)
            arr(10, cnt) = arrRange(r, 10)
            arr(11, cnt) = arrRange(r, 11)
            arr(12, cnt) = arrRange(r, 12)
            arr(13, cnt) = arrRange(r, 13)
            
        End If
    Next r
    ListBox1.Column = arr 'das array ist seitenverkehrt, deshalb column
    
End Sub

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige