(25.12.2023, 21:23)Andyle schrieb: Das funktioniert aber nur wenn das Format 29.2.23 lautet.
Trägt jemand 29.2.2023 ein kommt ein Laufzeitfehler 13
Fehlerstelle: rngDate = .ListObjects(1).DataBodyRange.Cells(i, 1)
Moin!
Mein Wort zum Dienstag:
Du musst halt ein wenig testen!
Aus der Hilfe zu IsDate:
Zitat:Gibt True zurück, wenn der Ausdruck ein Datum oder als gültige Datums- oder Uhrzeitangabe erkennbar ist; andernfalls wird False zurückgegeben.
29.2.2023 kann nur als 29.02.2023 interpretiert werden, da nur 2 gültiger Monat ist, es gibt keine Monate 2023 oder 29
Deshalb liefert IsDate("29.2.2023") false.
Jetzt zum 29.2.23:
Jetzt versucht (s.o.) IsDate(), ein Datum zu
erkennen.
Es gibt ja durchaus das Datumsformat YY.MM.DD
Daher
ermittelt IsDate("29.2.23") das gültige Datum 23.02.2029 und gibt true zurück!
Der Versuch einer Erklärung:
VBA wurde im letzten Jahrtausend
entwickelt.
Da gab es nur zweistellige aktuelle Jahreszahlen, die weit oberhalb des Tagesmaximums 31 lagen.
Seit 2001 erscheint die Pseudointelligenz widersinnig.
Und jetzt wird es wild:
9/11 ist ja ins Gedächtnis gebrannt, es handelt sich um den 11. September, weil die Amis das Datumsformat MM/DD/YYYY haben.
In einem deutschen
Windows mit deutschem Datumsformat ermittelt
CDate("9/11/98") den 09.11.1998
Ich bin mir sehr sicher, dass dies den 11.09.1998 ergibt, wenn ich das Windows-Datumsformat ändere.
Wenn man unbedingt das Jahr zweistellig eingeben will hilft (als Ansatz, nicht als Lösung):
Code:
Day(CDate("29.2.23")) = CInt("29")
Gruß Ralf