Hallo!
Um mal ganz vorne anzufangen: Ich habe eine Liste mit Bauteilen, die ersten Spalten stellen quasi die "Kopfdaten" dar (Name, Kategorie, etc.), die hinteren die Spezifikationen des Bauteils (Größe, Norm, etc.). Mit VBA habe ich eine Suche programmiert (dank Google bin ich auf nützliche Codes gestoßen). Die Ausgabe der Suchergebnisse soll in einer ListBox erfolgen. Im Moment sieht es so aus, dass der Suchbegriff in jeder Zelle gesucht wird und jeder Treffer seperat in der ListBox erscheint. Enthält z.B. eine Zeile mehrmals das Wort "Elektronik", dann wird jede "Elektronik"-Zelle der gleichen Zeile in die ListBox getragen.
Praktischer wäre es, wenn zwar jede Zelle nach dem Suchbegriff abgesucht wird, aber bei mehrmaligen Treffern in einer Zeile nur die ganze Zeile einmal in die ListBox eingetragen wird, und die Suche mit der nächsten Zeile weitermacht.
Hier der Code:
Sub suchen()
ListBox1.Clear 'Vor jeder Suche wird die ListBox geleert
With Sheets("Bauteile")
Set rng = .Range("A2:J" & .Rows.Count).Find(What:=TextBox1.Value, LookIn:=xlValues, LookAt:=xlPart, MatchCase:=False, after:=.Cells(.Rows.Count, 1))
If Not rng Is Nothing Then
strFirst = rng.Address
Do
ListBox1.AddItem rng.Value
ListBox1.List(lstSuche.ListCount - 1, 1) = rng.Offset(0, 1).Value
ListBox1.List(lstSuche.ListCount - 1, 2) = rng.Offset(0, 2).Value
ListBox1.List(lstSuche.ListCount - 1, 3) = rng.Row
Set rng = .Range("A2:J" & .Rows.Count).FindNext(rng)
Loop While Not rng Is Nothing And strFirst <> rng.Address
End If
End With
Set rng = Nothing
End Sub
Ich habe es schon mit ListBox1.RowSource probiert, aber irgendwie gab das nur Salat und ich kam nicht weiter. Könnte mir bitte jemand helfen?
Vielen Dank!
Claudia
|