Hat da jemand eine Idee?
Private Sub CommandButton1_Click()
'Wir definieren im ersten Schritt die die aktuelle Position des
'jeweiligen Treffers enthält.
'Sowie die Variable PLZ. Sie wird die Position des ersten Treffers
'enthalten
Dim rngcellPLZ As Range
Dim PLZ As Variant
'Hintergrundfarbe rot entfernen
'Tabelle1.UsedRange.Interior.Color = xlNone
Dim rng As Range
For Each rng In Tabelle1.Range("a:z")
If rng.Interior.ColorIndex = 255 Then
rng.Interior.ColorIndex = xlNone
End If
Next
'Es werden die Spalten A - Z der Tabelle 1 durchsucht.
With Tabelle1.Range("a:z")
'Im ersten Schritt leeren wir die Ergebnistabelle
UserForm1.ListBox1.Clear
'Mit der Find Methode bilden wir letztendlich die Standardsuche aus Excel in VBA nach.
'Die Syntax lautet wie folgt:
'Ausdruck .Find(What, After, LookIn, LookAt, SearchOrder, SearchDirection, MatchCase, _
MatchByte, SearchFormat)
'Kurze Erläuterung zu den Komponenten:
'What = Was wollen wir suchen? (erforderlich)
'After = Wird hier nichts angegeben, beginnt die Suche in der liken oberen Ecke des _
Bereiches.
' Ansonsten, falls angegeben beginnt die Suche NACH dieser Zelle beginnt. ( _
optional)
'LookIN = Der Informationstyp (optional)
'LookAt = xlWhole oder xlPart, also nach einer "genauen" Suche oder auch nach _
Teilbegriffen (optional)
'SearchOrder = xlByRows oder xlByColumns (optional)
'SearchDirection = Suchrichtung (optional)
'MatchCase = Groß oder Kleinschreibung beachten? Dann True, ansonsten False (optional)
'Wir werden hier in unserem Beispiel die einzige Erforderliche Komponente, What.
Set rngcellPLZ = .Find(UserForm1.TextBox1)
'Sollte die Methode keinen Treffer finden gibt sie "Nothing" zurück. Mit not....Nothing _
werten wir den Treffer
'aus.
If Not rngcellPLZ Is Nothing Then
'Die Variable PLZ wird mit der Position des Treffers 1. Treffers belegt.
'Wenn der angebene Bereich durchsucht wurde, würde die Suche wieder von vorne _
beginnen.
'Deshalb müssen wir unserer Do Loop Schleife einen Austritt mitteilen. Dies wird spä _
ter PLZ sein.
PLZ = rngcellPLZ.Address
'Mit einer Do Loop Schleife werden die Treffer abgearbeitet.
Do
'Jetzt befüllen wir die Listbox mit den Treffern.
With UserForm1.ListBox1
'Spaltenanzahl
.ColumnCount = 7 '-- eine Spalte mehr
'Item hinzufügen
.AddItem
'Unser Treffer (hier die Postleitzahl)
.List(.ListCount - 1, 0) = rngcellPLZ.Value
'Der dazugehörige Städtename eine Spalte rechts neben dem Treffer, deshalb . _
_
Offset(0, 1)
.List(.ListCount - 1, 1) = rngcellPLZ.Offset(0, 1).Value
'Und zu guter Letzt noch die Zelle des Treffers.
.List(.ListCount - 1, 2) = rngcellPLZ.Offset(0, 2).Value
'4. Spalte'
.List(.ListCount - 1, 3) = rngcellPLZ.Offset(0, 4).Value
'5. Spalte'
.List(.ListCount - 1, 4) = rngcellPLZ.Offset(0, 27).Value
'--neu--6. Spalte eintragen der Zeilennummer
.List(.ListCount - 1, 5) = rngcellPLZ.Address
'row = rngcellPLZ.row
'col = rngcellPLZ.Column
'Die Treffer werden mit einem grünen Hintergrund belegt.
rngcellPLZ.Interior.Color = 255
rngcellPLZ.Offset(0).Interior.Color = 255
'Definition der Spaltenbreite
.ColumnWidths = "1,5cm;1,5cm;1,5cm;2,0cm;2,0cm;1,0cm"
End With
'mit .FindNext springen wir zum nächsten Treffer der Suche.
Set rngcellPLZ = .FindNext(rngcellPLZ)
'Die Schleife soll solange arbeiten wie Treffer vorhanden sind.
'Wie aber oben bereits erwähnt würde der Suchlauf wieder von vorne beginnen, _
deshalb
'soll die Schleife austreten wenn PLZ, also der erste Treffer, wieder erreicht _
wurde
Loop While Not rngcellPLZ Is Nothing And rngcellPLZ.Address PLZ
End If
End With
'Bevor die Prozedur beendet wird lassen wir uns noch die Treffer auf einem Label anzeigen.
Label1.Caption = ListBox1.ListCount & " Treffer"
' If ListBox1.ListCount = 1 Then
' Application.Goto Tabelle1.Range(ListBox1.List(0, 5))
' End If
End Sub
Private Sub Label1_Click()
End Sub
'Bei Klick auf einen Treffer soll diese Zelle in der Tabelle ausgewählt werdenPrivate Sub ListBox1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
'--auslesen der Zeilennummer in Spalte 6
Range(ListBox1.List(ListBox1.ListIndex, 5)).Select
End Sub
Private Sub UserForm_Click()
End Sub