Wenn Sie in einer Access-Datenbank Termine verwalten, arbeiten Sie mit Funktionen wie "Wiedervorlage" oder "Erinnerungen". Deren Termine sollen dabei aber möglichst nicht auf ein Wochenende fallen und die geschätzte Arbeitszeit bis dort auch nur an echten Arbeitstagen stattfinden. Eine einfache Funktion löst diese Aufgabe.
Nur Arbeitstage berücksichtigen
Es ist leicht, Kalendertage zu einem Datum hinzuzufügen, indem Sie deren Anzahl einfach addieren. Es gibt jedoch keine fertige Lösung, wenn nur die Arbeitstage von Montag bis Freitag berücksichtigt werden sollen.
Die vorhandene DateDiff()-Funktion erlaubt es, von einem Anfangsdatum aus eine bestimmte Anzahl von Kalendertagen weiterzuzählen. Wenn Sie jedoch in einer Tabelle Anfangstermine speichern und zum Beispiel 10 Arbeitstage später einen Endtermin vorgeben möchten, geht das so nicht. Also machen Sie es eben selber!
Dafür schreiben Sie in einem normalen Modul eine Funktion, welche nach Belieben nur Arbeitstage von Montag bis Freitag berücksichtigt. Im Folgenden sehen Sie die Funktion AddWorkdays(), die ein Startdatum sowie eine Anzahl von Arbeitstagen als Argumente erhält:
Function AddWorkdays(varStart As Variant, varDauer As Variant) As Date
Dim intZaehler As Integer
Dim intAnzTage As Integer
If Not IsNull(varStart) And Not IsNull(varDauer) Then
intZaehler = 0
Do Until intZaehler >= varDauer
intAnzTage = intAnzTage + 1
Select Case Weekday(varStart + intAnzTage, vbMonday)
Case 6, 7
Case Else: intZaehler = intZaehler + 1
End Select
Loop
AddWorkdays = varStart + intAnzTage
End If
End FunctionDer Rückgabewert der Funktion ist Date, weil Access sie sonst wie einen Text behandelt. Die Argumente hingegen sind Variant, damit sie vor allem robust gegenüber Null-Werten ist. Solange nicht wirklich beide Argumente Daten enthalten, ist eine Berechnung nicht möglich.
Sie können diese Funktion dann wie jede andere auch in einer Abfrage in einem berechneten Feld benutzen. Hier sehen Sie dies auf der Grundlage einer Tabelle tblAufgaben mit den wesentlichen Feldern aufDatumStart und aufDauer:
