Hallo nochmal und sorry für die späte Antwort. Ich bin erst nach und nach dazu gekommen, an der Suche weiterzuprogrammieren, will euch aber meine Lösung nicht vorenthalten. Sie ist bestimmt nicht die eleganteste, aber den Umständen entsprechend (eine ListBox kann maximal nur zehn Spalten darstellen, zu wenig um eine ganze Zeile meiner Tabelle auszugeben) genügt es. Vielen Dank auch an den Gast, dessen "zeilen"-Abfrage ich benutze!
Zum besseren Verständnis: Ich habe meine Tabelle in verschiedene Bereiche eingeteilt und definiere sie beim Laden der UserForm (hier: grngKopfDatenBereich).
Public Sub Suchen()
frmSuche.lstSuche.Clear 'Die ListBox wird geleert
With ActiveWorkbook.Worksheets("Bauteile")
mstrZeilen = ","
Set mrngAktiveZelle = .Range("A2:AY" & .rows.Count).Find(What:=frmSuche.txtSuche.Value, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, MatchCase:=False, After:=.Cells(.rows.Count, 1)) 'Führe die Suche in einem festgelegten Bereich der Tabelle aus, hier "A1:AY"
If Not mrngAktiveZelle Is Nothing Then 'Wenn der Trefferbereich NICHT leer ist...
mstrFirst = mrngAktiveZelle.address '...dann setze die Treffer-Adresse in die Fund-Variable
Do
If InStr(mstrZeilen, "," & mrngAktiveZelle.Row & ",") = 0 Then
frmSuche.lstSuche.ColumnCount = 5 'Da ich mehr als zehn Spalten brauche, die ListBox aber nur zehn darstellen kann, habe ich in eine Spalte mehrere zusammengefasst; so komme ich auf nur noch fünf
frmSuche.lstSuche.ColumnWidths = "10cm;8cm;6cm;12cm;42cm;" 'Setze Spaltenbreiten. Schade, dass die Breiten sich nicht nach dem Inhalt richten können
frmSuche.lstSuche.AddItem 'Los geht's mit dem Befüllen
For i = 0 To 3 Step 1 'In die erste Spalte werden drei Tabellenspalten zusammengefasst
If Not IsEmpty(.Cells(mrngAktiveZelle.Row, grngKopfDatenBereich.column + i).Value) Then 'Wenn die Tabellenzellen NICHT leer sind...
If i = 0 Then 'Für den ersten Wert gilt, dass kein Trennzeichen davor kommt
frmSuche.lstSuche.List(frmSuche.lstSuche.ListCount - 1, 0) = .Cells(mrngAktiveZelle.Row, grngKopfDatenBereich.column + i).Value '...fülle die erste ListBox-Spalte mit dem ersten Tabellenspalten-Wert
Else 'Für alle weiteren Werte gilt, dass sie zur Abgrenzung einen Schrägstrich davor bekommen
frmSuche.lstSuche.List(frmSuche.lstSuche.ListCount - 1, 0) = frmSuche.lstSuche.List(frmSuche.lstSuche.ListCount - 1, 0) & "/" & .Cells(mrngAktiveZelle.Row, grngKopfDatenBereich.column + i).Value '...fülle die erste ListBox-Spalte mit allen weiteren Tabellenspalten-Werten
End If
End If
Next i 'Weiter geht's mit den anderen Tabellenspalten des ersten Bereichs (grngKopfDatenBereich)
'... Es folgen noch weitere Bereiche, die mit Schleifen eingelesen werden und in ListBox-Spalten zusammenge"quetscht" werden. Aber im Prinzip sieht's so aus wie oben
mstrZeilen = mstrZeilen & mrngAktiveZelle.Row & ","
End If
Set mrngAktiveZelle = .Range("A2:AZ" & .rows.Count).FindNext(mrngAktiveZelle) 'Die Suche geht weiter mit der nächsten Zeile...
Loop While Not mrngAktiveZelle Is Nothing And mstrFirst <> mrngAktiveZelle.address '...und zwar so lange, bis es keine Treffer mehr gibt
End If
End With
Set mrngAktive Zelle = Nothing
Ich gehe auf Fragen auch gerne ein! Nochmal Danke an den Gast!
|