Veröffentlicht 17. Mai 200223 j Hallo, Ihr alle da draußen! Ich habe eine Frage und eine VBA-Lösung zu folgenden Problem: Die Abfrage-Funktion "DatDiff" bzw. die VBA-Funktion "DateDiff" liefern ja merkwürdige Ergebnisse...! Wenn ich ermitteln möchte, wie alt jemand in Jahren ist, gebe ich folgende Funktion z.B. in einer Abfrage ein: y_Alter_inJahre: DatDiff("jjjj";<Geb.Datum>;Datum()) Annahme: Das Geb.Datum ist der 1. Juli 2000, das heutige Datum ist der 17.05.2002 Der Rückgabewert lautet: 2(!) Der Mensch ist aber erst 1 (vollendetes) Jahr alt!! In VBA ist es das gleiche (Intervall="yyyy", und die unterschiedlichen Datumsangaben D/USA spielen hier keine Rolle)! Eine Möglichkeit besteht in folgendem Modul: ***** Function MyDateDiff(sIntervall As String, dDatum1 As Date, Optional dDatum2 As Date = #12/31/1899#) As Long Dim iDateDir As Integer Dim dDateStore As Date Dim iCounter As Long 'Besser: "IsMissing" (Hat bei mir aber nicht funktioniert!) 'Wenn kein zweites Datum übergeben wird: If dDatum2 = #12/31/1899# Then dDatum2 = Date End If 'Bewegung durch die Zeit: Vorwärts oder rückwärts? If dDatum1 < dDatum2 Then 'Datum1 chronologisch vor Datum2 --> vorwärts iDateDir = 1 Else 'Datum2 chronologisch vor Datum1 --> rückwärts iDateDir = -1 End If 'Abfangen einiger Fehlermöglichkeiten: If UCase(sIntervall) = "J" Or UCase(sIntervall) = "JJJJ" Or UCase(sIntervall) = "Y" Then sIntervall = "yyyy" End If If UCase(sIntervall) = "T" Then sIntervall = "d" End If 'Zähler initialisieren '=-1 w/ Fußgesteuerter Schleife: Zähler + 1 (und DatumSpeicher + Intervall) ' Dann Test, ob Datum2 über-/unterschritten. ' Annahme: Beim ersten Test Bedingung nicht erfüllt. ' --> kein volles Intervall aber Zähler+1=0 (i.O.) iCounter = -1 dDateStore = dDatum1 Do dDateStore = DateAdd(sIntervall, iDateDir, dDateStore) iCounter = iCounter + 1 Loop While (dDateStore <= dDatum2 And iDateDir = 1) Or (dDateStore >= dDatum2 And iDateDir = -1) 'Ausgabe negativer Zahlen, wenn Zeitbewegung rückwärts MyDateDiff = iCounter * iDateDir End Function ***** Ich habe nicht unter Programmier-Hilfe geschaut, ob dort bereits eine ähnliche Lösung existiert! Ich möchte mich hier nur verewigen, da ich das obige Modul den seminar-Teilnehmern als "Free-Function" mitgebe. Ich habe auch nicht getestet, ob das Problem auch unter Excel und anderen Office-Produkten besteht. An die beiden Moderatoren: Evtl. verschieben nach "AnwendungsProgramme". Danke
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.