FAQ Access – Zeitdifferenzen ermitteln
Access Grundlagen- Zeitdifferenzen ermitteln
Problem
Eines der am häufigsten angefragten Themen ist die Verwaltung von Arbeitszeiten und die damit verbundene Berechnung der Differenzen beispielsweise bei Start- und Endzeiten für Projektarbeiten.
Lösung
Hier werden in der Regel Tabellen eingesetzt, die zum Beispiel zwei Felder „AZStart“ und „AZEnde“ enthalten, in denen im Format „Standarddatum“ beispielsweise eine Projektarbeit von „12.03.2004 08:45:00“ bis „12.03.2004 10:30:00“ festgehalten ist. Um hier die Differenz als Zeitangabe zu erhalten, können Sie das Feld „AZEnde“ einfach vom Feld „AZStart“ abziehen und entsprechend formatiert ausgeben:
Sub btnTest_Click () Dim ZeitDiff As Date ZeitDiff = Me.AZEnde - Me.AZStart MsgBox Format$(ZeitDiff, "hh:nn:ss") End Sub
Am besten geht man dabei so vor, dass der Aufwand jeweils in Minuten gespeichert und für die Anzeige aufbereitet wird. Neben den Feldern für Start und Ende der Projektarbeit ist zunächst ein weiteres Feld
„AZSumme“ vom Datentyp „Zahl/Long“
notwendig. Außerdem benötigen Sie zwei Funktionen, die eine Zeitdifferenz in Minuten umrechnen bzw. die in Minuten gespeicherte Summe wieder im Format „Stunden:Minuten“ anzeigen.
Geben Sie also zunächst die beiden folgenden Funktionen in einem beliebigen VBA-Modul ein:
Function TDiffToMins (Diff As Variant) Dim X As Variant On Error Resume Next X = Int(CSng(Diff * 24 * 60)) TDiff ToMins = X End Function
"X= TDiffToMins(AZEnde - AZStart)".
Function MinsToTime (Mins As Long) As String Dim H As Variant, M As Variant H = Mins \\ 60 M = Mins Mod 60 MinsToTime = H & ":" & Format$(M, "00") End Function
Die letzte Anweisung formatiert dann das Funktionsergebnis so, dass die Stunden immer ohne führende Nullen und die Minuten immer zweistellig, ggf. mit einer oder zwei Nullen, geliefert werden.Die beiden Funktionen bauen Sie nun in Ihren Formularen, in denen mit Zeitdifferenzen gearbeitet werden soll, wie folgt ein:
[Ereignisprozedur]“ ein und rufen Sie den Modul-Editor durch einen Klick auf die Schaltfläche mit den drei Punkten auf.·
Geben Sie im Editor die folgenden Anweisungen ein
Dim varMinuten As Variant varMinuten = TDiffToMins(AZEnde - AZStart) Me.AZSumme = varMinuten·
Bei der Eigenschaft „Steuerelementeinhalt“ tragen Sie die folgende Anweisung ein:
=MinsToTime([AZSumme])
Passen Sie dabei den Feldnamen „AZSumme“ entsprechend dem in Ihrem Formular verwendeten Feld für die Speicherung der Minuten an.Wenn Sie das Formular nun anzeigen lassen und Werte in die Felder für Start- und Endzeit eingeben, wird die Differenz automatisch in Minuten umgerechnet und im entsprechenden Feld gespeichert. Im Zusatzfeld erfolgt gleichzeitig eine Anzeige des errechneten Aufwandes im Format
„Stunden:Minuten“.
Um diese Informationen auch in einem Bericht auszugeben, gehen Sie wie folgt vor:
1. Öffnen Sie den Bericht im Entwurfsmodus.
2. Legen Sie im Detailbereich ein zusätzliches ungebundenes Textfeld an und rufen Sie das Eigenschaftenfenster
3. In der Eigenschaft „Steuerelementeinhalt“ tragen Sie die folgende Anweisung ein:
=MinsToTime([AZSumme])
Passen Sie den Feldnamen „AZSumme“ entsprechend dem in Ihrem Bericht verwendeten Feld für die Speicherung der Minuten an. Wenn Sie den Bericht daraufhin in der Vorschau anzeigen lassen, wird auch hier der Aufwand pro Projekt im Klartext im Format „Stunden:Minuten“ angezeigt.Um zusätzlich in einem Gruppen- oder Berichtsfuß eine Gesamtsumme auszugeben, legen Sie hier ebenfalls ein zusätzliches ungebundenes Textfeld an und setzen dessen Eigenschaft „Steuerelementeinhalt“ auf
=MinsToTime(Summe([AZSumme]))