FindNext
Gregor
Ich habe einen Code mit der Funktion Find und FindNext "zusammengebastelt". Es geht darum, in einer umfangreichen Tabelle gewünschte Auswertungskriterien (Namen, Jahr, Priotität) in definierten Spalten zu finden (mit Find-, FindNext oder ForEach-Abfragen). Bei der ersten Find-Funktion erg ("Wüest") erhalte ich nach der 2. Do-Abfrage ein Nothing, obwohl es im Suchbereich erg noch viele weitere Zellen mit dem Kriterium "Wüest" gibt. Leider kann ich die Tabelle nicht hochladen, weil zu umfangreich. Kann mir dennoch jemand sagen, was in diesem Code falsch ist oder wie ich den Code logischer (schnelle Abfrage) aufbauen kann?
Sub IK()
' übirge Varianblen mit Public definiert
Dim firstAddress, firstAddress2
Dim erg As Range, erg1 As Range, erg2 As Range
'---eruiert Anfang und Ende des Suchbereich
Anfang = Columns(Spalte_P_RV_IK).Find("Wüest", LookAt:=xlWhole).Row - 1
Ende = Columns(Spalte_P_RV_IK).Find("Wüest", LookAt:=xlWhole, searchdirection:=xlPrevious). _
Row
Set rng = Sheets("Master Datei").Columns(Spalte_P_RV_IK)
Set erg = rng.Find("Wüest", LookAt:=xlWhole)
If Not erg Is Nothing Then
firstAddress = erg.Address
Zeile = erg.Row
'--- prüfen, ob eruierte Zeile der obersten Zeile Bahnhof entspricht
If IsEmpty(Cells(Zeile, 1)) And IsEmpty(Cells(Zeile, 2)) = True Then
Zeile = Cells(Zeile, 1).End(xlUp).Row
End If
ZeileEnd = IIf(IsEmpty(Cells(Zeile + 1, 1)), IIf(IsEmpty(Cells(Cells(Zeile, 1).End( _
xlDown).Row - 1, Spalte_Nutzlänge)), Cells(Cells(Zeile, 1).End(xlDown).Row, Spalte_Nutzlänge).End(xlUp).Row, Cells(Zeile, 1).End(xlDown).Row - 1), Zeile)
'--- eruiert zu durchsuchenden rng Jahre
Set rng1 = Union(Worksheets("Master Datei"). _
Range(Cells(Zeile, Spalte_P_Länge), Cells(ZeileEnd, Spalte_P_Länge)), _
Range(Cells(Zeile, Spalte_P_Höhe), Cells(ZeileEnd, Spalte_P_Höhe)), _
Range(Cells(Zeile, Spalte_treppenfrei), Cells(ZeileEnd, Spalte_treppenfrei)))
'---Handlungsbedarf alle Jahre
If Jahr1 = "alle Jahre" And Jahr2 = "alle Jahre" Then
If WorksheetFunction.CountA(rng1) > 0 Then Handlungsbedarf = True
Else
'---Handlungsbedarf ausgewählte Jahre
For Each erg1 In rng1.Cells
If erg1.Value >= Jahr1 * 1 And erg1.Value firstAddress2
End If
End Select
End If
Do
Set erg = rng.FindNext(erg)
Zeile = erg.Row
'--- prüfen, ob eruierte Zeile der obersten Zeile Bahnhof entspricht
If IsEmpty(Cells(Zeile, 1)) And IsEmpty(Cells(Zeile, 2)) = True Then
Zeile = Cells(Zeile, 1).End(xlUp).Row
End If
ZeileEnd = IIf(IsEmpty(Cells(Zeile + 1, 1)), IIf(IsEmpty(Cells(Cells(Zeile, 1).End( _
xlDown).Row - 1, Spalte_Nutzlänge)), Cells(Cells(Zeile, 1).End(xlDown).Row, Spalte_Nutzlänge).End(xlUp).Row, Cells(Zeile, 1).End(xlDown).Row - 1), Zeile)
'--- eruiert zu durchsuchenden rng Jahre
Set rng1 = Union(Worksheets("Master Datei"). _
Range(Cells(Zeile, Spalte_P_Länge), Cells(ZeileEnd, Spalte_P_Länge)), _
Range(Cells(Zeile, Spalte_P_Höhe), Cells(ZeileEnd, Spalte_P_Höhe)), _
Range(Cells(Zeile, Spalte_treppenfrei), Cells(ZeileEnd, Spalte_treppenfrei)))
'---Handlungsbedarf alle Jahre
If Jahr1 = "alle Jahre" And Jahr2 = "alle Jahre" Then
If WorksheetFunction.CountA(rng1) > 0 Then Handlungsbedarf = True
Else
'---Handlungsbedarf ausgewählte Jahre
For Each erg1 In rng1.Cells
If erg1.Value >= Jahr1 * 1 And erg1.Value firstAddress2
End If
End Select
End If
Loop While Not erg Is Nothing And erg.Address firstAddress
End If
Application.StatusBar = False
End Sub
Vielen DankGregor