.Find - Problem
07.11.2007 10:48:00
Klaus
ich habe ein Problem mit der Find-Funktion.
Zum Verständnis: Es dreht sich um eine Anwendung, in der auf Rohdaten einer Datenbankanwendung zurückgegriffen wird, die als Exceldatei geliefert wird. Dabei geht es um die Beschreibung von Waldflächen. In der ersten Tabelle stehen Informationen zur Waldaufteilung (in Wirtschaftseinheiten = Abteilungen). Hier stehen die grundlegenden Informationen wie Geologie, Klima usw. In der zweiten Tabelle stehen die Informationen zu den Baumarten, die auf der Fläche stehen. Der gleiche Schlüssel in beiden Tabellen ist als "Abt-Schlüssel" bezeichnet. In der ersten Tabelle gibt es den Abt-Schl nur einmal, in der Zweiten nicht oder mehrmals.
Bei meiner Auswertung wird die Tabelle1 zur Grundlage. Ich lese den Abt-Schlüssel aus und suche in Tabelle2 im Abt-Schl ob er vorhanden ist. Es handelt sich um eine abgewandelte Funktionsbeschreibung aus dem Archiv. Sie funktioniert so wie ich es jetzt beurteilen kann gut bis auf die Ausnahme, dass beim 1. Durchlauf als Adresse der 2. Datensatz angegeben wird. z.B ABT-Schl "5000001a" ist in Tabelle2 5 x vorhanden (sortiert nach Abt-Schl). 1. Adresse wäre "A3" angezeigt wir aber Adresse "A4". In meiner Beispieldatei ist auch dass richtig, da nur 1 Wert 1 x ausgelesen werden soll, der in allen DS existiert und gleich ist.
Es handelt sich um diese Zeilen
Set c = .Find(t_abt, LookIn:=xlValues)
If Not c Is Nothing Then
firstadress = c.Address
~f~
In der Folge wird jeweils der richtige DS gefunden.
gesamter Codeabschnitt
~f~
For Each x In wo_abtschl
t_abt = wo_Abt_list(i, 1)
wo_flae = Application.VLookup(t_abt, wo_Abt_list, 2, False)
' baz_abtschl.Activate
' baz_abt = Application.VLookup(t_abt, baz_abtschl, 1, False)
'
With baz_abtschl
Set c = .Find(t_abt, LookIn:=xlValues)
If Not c Is Nothing Then
firstadress = c.Address
Do
If c.Address = firstadress Then
' Blössenfläche aus BAZ einfügen (Nur 1 x)
bloesFlae = c.Offset(0, baz_bloeFlae_sp - 1).Value
wo_Abt_list(i, 4) = bloesFlae
End If
baz_flae = baz_flae + c.Offset(0, wo_fla_sp - 1).Value
Set c = .FindNext(c)
Loop While Not c Is Nothing And c.Address <> firstadress
End If
End With
wo_Abt_list(i, 3) = baz_flae
wo_Abt_list(i, 5) = baz_flae + bloesFlae
If (baz_flae + bloeFlae) > 0 Then
flaeFaktor = wo_flae / (baz_flae + bloesFlae)
End If
wo_Abt_list(i, 7) = flaeFaktor
baz_flae = 0
flaeFaktor = 0
bloesFlae = 0
i = i + 1
Next
Kann mir vielleicht jemand weiterhelfen.
MfG. Klaus