Forumbeitrag
Excel-Version des Fragestellers:
365 privat
Erfahrungslevel des Fragestellers:
Basiskenntnisse in VBA
HI
du musst hier einer Fallunterscheidung machen:
a) Eingabe nur Jahreszahl
b) Eingabe mit Monat und Jahr
c) Eingabe vollständig.
dabei wäre es hilfreich zu wissen, welche Varianten der Datumseingabe alles vorkommen können.
Wenn du es aus dem Internet kopierst, dann müsste es ja halbwegs eindeutig sein.
wichtig wäre, dass du die Werte als TEXT übernimmst, damit Excel nicht schon von alleine anfängt, wie Werte in Datumswerte umzuwandeln.
dh du solltest sie dann auch nicht direkt überschreiben, sondern das ermittelte Datum in die Nachbarzelle schreiben, denn dort willst du dann ja nicht Texte, sondern Zahlen haben.
die Umwandlung mit der Fallunterscheidung könnte dann für einen Wert so aussehen:
dim Eingabe as string
dim Datum as string
Eingabe = ".. dein Datumsstext..."
If Eingabe like "####" Then '--- nur die Jahreszahl
Datum = Cdate("31.12." & Eingabe)
Else If Eingabe like "[JFMASOND]* ####" Then '--- Monat und Jahreszahl am ende
Datum = Worksheetfunction.EoMonth(CDate(Eingabe), 0)
Elseif IsDate(Eingabe) then '--- ale anderen Texte, die wie ein Datum aussehen
Datum = Cdate(Eingabe)
Else
Datum = "Datum nicht ermittelbar
end if
Cells(x, y).FormulaLocal = Datum
Achtung, ich behandle die Variable "Datum" als Textstring, damit ich auch die Fehlermeldung ohne Fehler ausgeben kann.
damit der Text dann von Excel in ein korrekte Datum übernommen wird, sollte man den Wert in die .FormulaLocal-Eigenschaft der Zelle schreiben.
Würde man in .Value schreiben, bräuchte man das amerikanische Format. Das CDate erzeugt aber das deutsche (bzw das Lokale), daher der Wert in .FormulaLocal.
Gruß Daniel