Hallo zusammen.
ich berechne anhand dieses Ausdrucks das Alter in Monaten meiner Tiere:
Alter: DatDiff("m";[GebDatum];Jetzt())
Leider rundet Access nun entgegen excel das Alter meiner Tiere auf.
Wie kann das verhindert werden.
Noch schöner wäre das Alter in Monaten und Tagen.
Kann mir da jemand weiterhelfen?
Schon mal Vielen Dank
Thomas
Hi,
mach das "d" fur days (tage) dazu.
Hallo,
kannst du mir das noch ein bisschen näher erläutern.
Wo machst du das "d" dazu.
Gruß Thomas
Hallo,
mach Dich hier mal schlau: http://www.donkarl.com/?FAQ2.7
Hallo nochmal.
Ich komme hier nicht so recht weiter.
Der Link auf donkarls Seite zum Microsoft Support funktioniert leider nicht mehr.
Ich denke ich habe es hier https://docs.microsoft.com/de-de/office/vba/access/concepts/date-time/calculate-age wiedergefunden.
Ich habe nun Code im VBA Editor unter (Allgemein) hinzugefügt und die Variable StartDate durch GebDatum aus meiner Abfrage ersetzt.
Public Function AgeMonths(ByVal GebDatum As String) As Integer
Dim tAge As Double
tAge = (DateDiff("m", GebDatum, Now))
If (DatePart("d", GebDatum) > DatePart("d", Now)) Then
tAge = tAge - 1
End If
If tAge < 0 Then
tAge = tAge + 1
End If
AgeMonths = CInt(tAge Mod 12)
End Function
Mit
VBA: AgeMonths([GebDatum]) wollte ich den Ausdruck starten, nun bekomme ich die Fehlermeldung
"Undefinierte Funktion AgeMonths in Ausdruck.
Ich hoffe meine Herangehensweise passt einigermaßen.
Schon mal Danke
Thomas
Zitateinigermaßen
... ist in der Auslegung sehr relativ ...
Du solltest Dich eingangs stärker mit Datentypen beschäftigen.
DateDiff erwartet als zweites und drittes Argument Date-Werte. GebDatum da als String anzuliefern ist schon ein grober Fehler.
Die Rückgabe von DateDiff ist faktisch wie auch aus der Definition heraus eine Ganzzahl. Warum soll da eine Double-Variable diese Rückgabe entgegennehmen?
Wenn Du dann syntaxfehlerfrei durchkommst, wirst Du doch selber beurteilen können, ob das Ergebnis Deinen Erwartungen entspricht.
Hallo Eberhard.
ZitatDateDiff erwartet als zweites und drittes Argument Date-Werte. GebDatum da als String anzuliefern ist schon ein grober Fehler.
Die Rückgabe von DateDiff ist faktisch wie auch aus der Definition heraus eine Ganzzahl. Warum soll da eine Double-Variable diese Rückgabe entgegennehmen?
Mir ist das auch schon komisch vorgekommen, so steht es aber in der Microsoft Support Vorlage und da ich nicht wirklich Ahnung habe....
... selbst bei seinem Gott sollte man ein gesundes Stück Restmissvertrauen haben ...
So jetzt kann ich zumindest die Monate richtig berechnen.
Ich habe ein Modul mit folgendem Code angelegt und rufe dieses in einem Ausdruck auf:
Function Age(GebDatum As Date) As Integer
Dim varAge As Integer
varAge = DateDiff("m", GebDatum, Now)
If Day(GebDatum) > Day(Now) Then
varAge = varAge - 1
End If
Age = varage
End Function
Ich würde mir nun noch gerne in einem weiteren Ausdruck die Tage des Alters anzeigen lassen.
Ist der Tag des Geburtstags < als der Tag heute ist das ja noch einfach, dazu müsste ich nur beide Tage voneinander abziehen.
Wie macht mann das aber wenn das Ergebnis praktisch ins negative geht?
Idee:
Da Monate unterschiedlich viele Tage haben, ist dann eine zusätzliche Tagesberücksichtigung alles andere als mathematisch exakt. Da könnte man sich gleich insgesamt auf die Tagesdifferenz orientieren, das wäre dann wieder präzise. Überblicksweise könnte man für den Monat 30 Tage annehmen und sich also die Monats- + Tagesdarstellung herleiten aus einer Ganzzahlendivision:
Monate = Tagesdifferenz \ 30
Tage = Tagesdifferenz mod 30
So mit der Ganzzahldivision bekam ich sehr große Abweichungen.
Ich habe jetzt folgende Funktion erstellt:
Function Tage(GebDatum As Date) As Integer
Dim varTage As Integer
varTage = Day(Now) - Day(GebDatum)
If varTage < 0 Then
varTage = 30 - (Day(GebDatum) - Day(Now))
End If
Tage = varTage
End Function
Damit nähere ich mich dem Ergebnis +-1Tag das reicht mir