Moin zusammen!
Ich möchte eine Listbox in einer Userform wegen der vielen Zeilen mit einer Suchfunktion ausstatten und komme leider nicht zu einer Lösung.
Die optimale Lösung wäre, wenn ich in einer Textbox einen beliebigen Zeileninhalt (Name, ID, Position, Organisation,...) suchen könnte und sich die Listbox automatisch mit allen übereinstimmenden Datensätzen anpassen würde.
In UserForm_Initialize habe ich die Listbox wie folgt gefüllt:
Private Sub UserForm_Initialize()
With UserForm1
.StartUpPosition = 1
.Top = 1
.Left = 1
End With
Dim last As Integer
last = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).row + 1
ListBox1.ColumnCount = 12
ListBox1.ColumnHeads = True
ListBox1.ColumnWidths = "30;50;200;60;30;110;110;90;50;40;50;80;60"
ListBox1.RowSource = "A2:M" & last
End Sub
Die Suchfunktion habe ich mir so vorgestellt, dass die Listbox bei Eingabe in Textbox1 entsprechend der Eingabe gefiltert wird.
Nach langer Recherche und Überlegung (bin leider absoluter vba Anfänger) ist folgender Code dazu entstanden:
Private Sub TextBox1_Change()
Dim i As Long
On Error Resume Next
Me.TextBox1.Text = StrConv(Me.TextBox1.Text, vbProperCase)
Me.ListBox1.Clear
For i = 2 To Application.WorksheetFunction.CountA(ActiveSheet.Range("A:A"))
For x = 1 To 12
a = Len(Me.TextBox1.Text)
If Left(ActiveSheet.Cells(i, x).Value, a) = Me.TextBox1.Text And Me.Textbox1.Text <> "" Then
Me.ListBox1.AddItem ActiveSheet.Cells(i, x).Value
For c = 1 To 12
Me.ListBox1.List(Listbox1.ListCount - 1, c) = ActiveSheet.Cells(i, c + 1).Value
Next c
End If
Next i
End Sub
Nun die Frage an Euch: Hat jemand eine schlauere / schlankere Lösung oder könnte vielleicht helfen, meinen Code zum Laufen zu bringen?
Aktuell bekomme ich bei Ausführung den Laufzeitfehler '9' ausgegeben.
Vielen Dank im Voraus und beste Grüße
Jan
|