Termine verwalten - Arbeitstage berechnen

In Access statt mit Kalendertagen mit Arbeitstagen rechnen

Von: Lorenz Hölscher
Stand: 2. Mai 2011
Anmelden um Kommentare zu schreiben

Downloads zu diesem Beitrag

Über den Autor: Lorenz Hölscher

bild80517

Lorenz Hölscher ist freiberuflicher Dozent, Berater und Programmierer mit Schwerpunkt Anwendungs-Programmierung. Vorrangig widmet er sich Access, Word und Excel sowie begleitenden grafischen Arbeiten. Er legt viel Wert auf benutzerfreundliche Oberflächen und ordentliches Design in Optik und Programmierung. Zu Hilfe kommen ihm da seine langjährigen "branchenfremden" Erfahrungen als Architekt, Layouter und Designer.

Lorenz Hölscher bietet eigene Hilfeseiten an und hat bei Microsoft Press mehrere Bücher veröffentlicht zu Access 2007, Access 2007 VBA, Word 2007 VBA und Access 2010.

Beiträge des Autors als Atom-Feed Atom-Feed: Neues von akademie.de

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 Function

Der 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:

Diese Seite ist für Mitglieder von akademie.de reserviert.

Möchten Sie die Mitgliedschaft 14 Tage kostenlos testen und den Beitrag komplett lesen?

Ich bin bereits Mitglied
Jetzt Probemitglied werden
Ich kann in den 14 Tagen Probezeit formlos z.B. per E-Mail stornieren. Wenn ich das nicht tue, entscheide ich mich für ein