Hallo Walter,
zu 1.
Ich vermute, die ID ist eindeutig.Wenn Du die Prozedur cmdSearch_Click() wie folgt änderst, werden nur eindeutige Daten in der Listbox aufgenommen (Änderungen sind in rot dargestellt):
Private Sub cmdSearch_Click()
Dim objSH As Worksheet
Dim rngSearch As Range
Dim strFirst As String
Dim Lz As Long
Dim strGelistet As String
If txtSearch <> "" Then
ListBox1.Clear
Set objSH = Sheets("Tabelle1")
With objSH
Lz = Application.Max(6, .Cells(Rows.Count, 2).End(xlUp).Row)
Set rngSearch = .Range("A6:F" & Lz).Find(What:=txtSearch, LookIn:=xlValues, LookAt:=xlPart, _
MatchCase:=False, After:=.Cells(6, 1))
If Not rngSearch Is Nothing Then
strFirst = rngSearch.Address
Do
If (.Cells(rngSearch.Row, 3) = ComboBox1.Text Or ComboBox1.Text = "Alle") _
And Not strGelistet Like "*|" & .Cells(rngSearch.Row, 1) & "|*" Then
strGelistet = strGelistet & "|" & .Cells(rngSearch.Row, 1) & "|"
ListBox1.AddItem .Cells(rngSearch.Row, 1)
ListBox1.List(ListBox1.ListCount - 1, 1) = .Cells(rngSearch.Row, 2)
ListBox1.List(ListBox1.ListCount - 1, 2) = .Cells(rngSearch.Row, 3)
ListBox1.List(ListBox1.ListCount - 1, 3) = .Cells(rngSearch.Row, 4)
End If
Set rngSearch = .Range("A6:F" & Lz).FindNext(rngSearch)
Loop While Not rngSearch Is Nothing And rngSearch.Address <> strFirst
ListBox1.ColumnWidths = "60;120;100;60"
End If
End With
If ListBox1.ListCount = 0 Then ListBox1.AddItem "Kein Treffer!"
End If
End Sub
Die Variable
strGelistet nimmt die ID auf, wenn ein Element in die Liste aufgenommen wird. Vor der Aufnahme eines neuen Elementes, wird geprüft, ob die ID des neuen Elementes schon in der Variablen
strGelistet enthalten ist. Nur wenn dies nicht der Fall ist, wird ein neues Element aufgenommen.
zu 2.
Nachfolgenden Code bitte noch einfügen:
Private Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim strFilter As String
strFilter = Me.ListBox1.Text
Unload Me
Range("A5").CurrentRegion.AutoFilter Field:=1, Criteria1:="=" & strFilter, _
Operator:=xlAnd
End Sub
Außerdem muss der Code bei UDFstarten noch wie folgt ergänzt werden. Macht man das nicht und ist noch ein Filter aktiv, werden sonst in der Listbox nur die gefilterten Daten angezeigt,
Sub UDFStarten()
If ActiveSheet.AutoFilterMode Then
ActiveSheet.Rows.AutoFilter
End If
UserForm2.Show
End Sub
Gruß
Robert