ich versuche eine Userform mit Listbox und Textbox mit Suchfunktion zu erstellen. Die Listbox (zweispaltig) wird aus einer Tabelle gefüllt. Über die Textbox gebe ich einen Suchbegriff ein. In der Listbox kann ich dann die markierten Suchergebnisse in in eine Zieltabelle schreiben. Das funktioniert soweit.
Mein Problem ist, wenn ich in der Listbox die Suchergebnisse markiere und will dann einen weiteren Suchbegriff in der Textbox eingeben, werden die markierten Ergebnisse in der Listbox wieder gelöscht.
Kann ich das irgendwie umgehen?
Ich würde gerne Suchbegriff eingeben, in der Listbox markieren und wieder einen Suchbegriff eingeben. Die vorherigen Markierungen sollten dabei erhalten bleiben.
Gruß,
Gerald
Hier wäre der Code:
Private Sub UserForm_Activate()
Dim lZeile, iRow, iRowU As Long
Dim arr() As Variant
With wskatalog
lZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
ListBox1.Clear
For iRow = 2 To lZeile
If .Cells(iRow, 1) "" Then
ReDim Preserve arr(0 To 1, 0 To iRowU)
arr(0, iRowU) = .Cells(iRow, 1)
arr(1, iRowU) = .Cells(iRow, 3)
iRowU = iRowU + 1
End If
Next iRow
With ListBox1
.ColumnCount = 2
.ColumnWidths = "150; 300"
.Font.Size = 10
.Column = arr
.ListStyle = fmListStyleOption
.MultiSelect = fmMultiSelectMulti
End With
End With
End Sub
Private Sub cmd_Auswahl_uebernehmen_Click()
Dim i As Integer
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
wsstelle.Cells(Rows.Count, 3).End(xlUp).Offset(1) = .List(i, 0)
wsstelle.Cells(Rows.Count, 6).End(xlUp).Offset(1) = .List(i, 1)
End If
Next i
End With
TextBox1 = ""
For i = 0 To ListBox1.ListCount - 1
ListBox1.Selected(i) = False
Next i
End Sub
>
Private Sub TextBox1_Change()
Dim i As Integer
Dim lngLaenge As Long
Dim strText As String
Me.ListBox1.Clear
UserForm_Activate
lngLaenge = Len(Me.TextBox1.Value)
With ListBox1
If Left(Me.TextBox1.Value, 1) = "*" Then
strText = LCase(Replace(Me.TextBox1.Value, "*", ""))
For i = .ListCount - 1 To 0 Step -1
If InStr(.List(i, 0), strText, vbTextCompare) > 0 Or InStr(.List(i, 1), strText, _
vbTextCompare) > 0 Then
Else
.RemoveItem i
End If
Next i
Else
For i = .ListCount - 1 To 0 Step -1
If Left(.List(i, 0), lngLaenge) = Me.TextBox1.Value Or _
LCase(Left(.List(i, 1), lngLaenge)) = LCase(Me.TextBox1.Value) Then
Else
.RemoveItem i
End If
Next i
End If
End With
End Sub