PDA

Vollständige Version anzeigen : .Find findet "zusammengebautes" Datum nicht


hai-zi
10.07.2015, 23:26
Hallo zusammen,

ich beiße mir jetzt schon seit Stunden die Zähne an einem relativ simplen Problem aus: ich habe einen Bereich mit Datumsangaben und würde gerne die Spalte eines bestimmten Datums zurückgeben. Das Problem dabei: das Datum wird über die Datumsformel "zusammengebaut". Ich habe beispielsweise in Zeile 1 die Monate von 1 bis 12, in Zeile 2 das Jahr, und in Zeile 3 dann z.B. DATUM(2:2;1:1;1) - ergibt 12 Zellen mit jeweils dem Ersten des Monats im entsprechenden Jahr.

Daneben habe ich ein Datum, das gesucht werden soll. Dieses Datum wird auf die gleiche Art und Weise erzeugt, also auch über DATUM(...).

Obwohl der Aufbau also gleich ist, scheint sich mein Code daran die Zähne auszubeißen. Der Aufbau ist ganz einfach: Lese definiertes Datum aus Zelle B3 aus, suche im Bereich D3:O3, gib die Spalte in Zelle B4 zurück.

Sub Find_Date()

Dim Period
Dim Column

With ThisWorkbook.Worksheets("Tabelle1")
Period = .Range("B3")
Column = .Range("D3:O3").Find(Period, LookIn:=xlFormulas).Column
.Range("B4") = Column
End With

End Sub

Beim Find erhalte ich immer "Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt". Es muss wohl schon an der Erzeugung der Datumsangaben im Suchbereich liegen: wenn ich die Datumswerte dort hart einfüge, läuft der Code durch. Das zu suchende Datum kann ich dabei weiterhin über DATUM erzeugen.

Hätte mir jemand ne Idee, wie ich den Code ändern muss, damit er trotz der Datumserzeugung via Formel durchläuft?

Danke schon mal!

Sven

Scorefun
11.07.2015, 00:21
probier mal so...

Column = .Range("D3:O3").Find(Period, LookIn:=xlValues).Column

hai-zi
11.07.2015, 03:28
Hallo Ralf, das funktioniert so tatsächlich! Vielen Dank!

Als ich es jetzt allerdings in der tatsächlichen "Live"-Datei geändert habe, habe ich trotzdem den gleichen Fehler bekommen. Es scheint am Datumsformat zu liegen. In der Testdatei hatte ich das Datum auch tatsächlich als Datum im deutschen Format formatiert (dd.MM.jjjj). In der Live-Datei hat das Feld das Sonderformat [$-409]mmm, also dreistellige Monatskürzel in englischer Sprache. Wenn ich das in der Testdatei (Code oben) auch so einstelle, läuft er mir in der Testdatei auch wieder auf den gleichen Fehler. Vielleicht hat noch jemand eine Idee, wie ich das umschiffen kann?

EarlFred
11.07.2015, 05:13
Hallo Sven,

Es scheint am Datumsformat zu liegen.
Korrekt.
Find mit Datum kannst Du deswegen vergessen. Nimm Match (Arbeitsblattfunktion Vergleich). Beispiele findest Du sicher im Dutzend im Netz.

Grüße
EarlFred

hai-zi
11.07.2015, 06:09
We have a liftoff, I repeat, we have a liftoff! :D

Danke EarlFred für den Hinweis! Ich hatte es gestern schon mal mit MATCH versucht, aber hab wohl zu früh aufgegeben. Erst wollte er auch hier nicht, aber nachdem ich das Datum als Long definiert habe, läuft er durch.

Der Vollständigkeit halber der funktionierende Code:

Sub Find_Date()

Dim Period As Long
Dim Column

With ThisWorkbook.Worksheets("Tabelle1")
Period = .Range("B3")
Column = Application.Match(Period, Range("D3:O3"), 0)
.Range("B4") = Column
End With

End Sub