Zum Inhalt springen

z.B. Access 2000: Dat(e)Diff-Funktion


piomode1

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...