Berechnung von Nachtarbeitsstunden mit Access und VBA
In einen Access-Projekt stand die Berechnung von Nachtarbeitsstunden mit Access und VBA als Aufgabe an. Die Nachtarbeitsstunden sollten später gesondert ausgewiesen werden. Bei einer sehr flexible Arbeitszeiteinteilung, mit Unterbrechungen und Mehrarbeitsstunden zeigte sich, daß der Anteil der Nachtarbeitsstunden periodisch sehr unterschiedlich liegen kann.
Die erste Überlegung ging dahin, zu ermitteln, welcher Anteil einer Zeitperiode 1 (Arbeitszeit) sich in einer Zeitperiode 2 (Nachtstunden) befindet.
Dabei fällt auf, daß es 9 verschiedene Möglichkeiten gibt:
Berechnung von Nachtarbeitsstunden mit Access und VBA
| Nacht Morgens | Tag | Nacht Abends | Nacht Morgens | Tag | ||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
| Beginn | Ende | |||||
Mit der folgenden Funktion konnte die Berechnung realisiert werden.
Function NightHours(SW, EW)
' SW = Uhrzeit Arbeitsbeginn
' EW = Uhrzeit Arbeitsende
If BeginNight = 0 Then BeginNight = TimeValue(ReadParameter("BeginNight", "Date"))
If EndOfNight = 0 Then EndOfNight = TimeValue(ReadParameter("EndOfNight", "Date"))
If (TimeValue(SW) > BeginNight Or TimeValue(SW) < EndOfNight Or TimeValue(EW) < EndOfNight Or TimeValue(EW) > BeginNight) Then
S = DateValue(SW) + BeginNight
E = DateValue(EW) + EndOfNight
If TimeValue(SW) < EndOfNight And TimeValue(EW) > BeginNight Then
S1 = SW
E1 = EndOfNight
S2 = BeginNight
E2 = EW
NightHours = DateDiff("n", S1, E1) + DateDiff("n", S2, E2)
Else
If TimeValue(EW) > BeginNight Then E = EW
If TimeValue(SW) > BeginNight Then S = SW
If TimeValue(SW) < EndOfNight Then S = SW
If TimeValue(EW) < EndOfNight Then E = EW
NightHours = DateDiff("n", S, E)
End If
End If
End FunctionDie Funktion gibt den Anteil Nachtarbeitsstunden in Minuten zurück.
