Autor: André Minhorst, Duisburg
Das Berechnen des Datums, an dem eine bestimmte Frist abgelaufen ist, sollte normalerweise keine besondere Schwierigkeit sein. Man nimmt das Anfangsdatum, addiert die gewünschte Anzahl Tage auf das Startdatum auf und – Pech gehabt! Leider auf einem Samstag oder Sonntag gelandet. Und für die fristgerechte überweisung von Rechnungen an einem Samstag oder Sonntag kann man selbst im Zeitalter des Online-Banking nicht jeden begeistern. Also flugs das Datum auf den nächsten Montag geändert und fertig – aber muss das denn alles von Hand passieren Nein. Mit den im Folgenden vorgestellten Methoden legen Sie jedes Ende einer Frist auf einen Wochentag. Und am Beispiel einer Bücherei erfahren Sie, wie die Methoden anzuwenden sind.
Die Einhaltung von Fristen ist für beide Seiten wichtig – sowohl für denjenigen, der eine Forderung hat und dementsprechend eine Frist bis zur Erfüllung der Forderung setzt, als auch für denjenigen, der die Forderung in der gesetzten Frist erfüllen soll.
Manchmal will der Geforderte gar nicht unbedingt die Frist ausreizen und muss es auch nicht – beispielsweise, wenn es um die Rückgabe eines Buches geht. Hat man es ausgelesen, gibt man es gerne auch vor Ablauf der Ausleihfrist zurück, sodass andere eventuell früher als erwartet in den gleichen Lesegenuss kommen. Anders ist es in finanziellen Dingen: Hier gilt das Zitat „Zeit ist Geld“. Denn schließlich bringt das Geld umso mehr Zinsen, je länger es irgendwie angelegt ist.
Und daher reizt man in solchen Fällen schon einmal die Frist aus.
In allen Fällen aber gilt: Das Ende der Frist sollte nicht auf einen Sonn- oder Feiertag fallen und, abhängig von den öffnungszeiten der fristsetzenden Institution, möglicherweise auch nicht auf einen Samstag.
Voraussetzung für die folgenden Beispiele ist die Kenntnis des Datums, an dem die Frist beginnt, sowie die Dauer bis zum Ablauf der Frist in Tagen.
Fristende berechnen ohne Rücksicht
Verwendet man VBA, lässt sich das Datum des Endes der Frist ohne die Berücksichtigung von Samstag, Sonn- und Feiertagen leicht ermitteln, indem man die folgende Funktion verwendet:
Function Fristende(Fristanfang As Date, _ Fristdauer As Long) As Date Fristende = Fristanfang + Fristdauer End Function
Hinweis
Geben Sie die Funktion in ein neues Modul ein. Aktivieren Sie dazu im Datenbankfenster das Register Module und klicken Sie auf die Schaltfläche Neu. Nun können Sie im VBA-Fenster die gewünschte Funktion eingeben.
Als übergabeparameter der Funktion dienen das Datum des Fristbeginns sowie die Länge der Frist in Tagen. Verwenden Sie einmal den folgenden Funktionsaufruf:
Debug.Print Fristende("1.1.2001",30)
Hinweis
Funktionsaufrufe, die nicht innerhalb einer Anwendung erfolgen, können Sie am besten im Testfenster ausprobieren. Betätigen Sie die Tastenkombination Strg + G, um das Testfenster zu aktivieren.
Im Testfenster sollten Sie nun den folgenden Ausdruck erhalten:
31.01.2001
Fristende ohne Wochenende
Wenn Sie bei der Berechnung des Fristendes die beiden Tage des Wochenendes, den Samstag und den Sonntag, außen vor lassen möchten, haben Sie zwei Möglichkeiten:
Entweder Sie verkürzen die Frist auf den letzten Tag vor dem Wochenende oder Sie verlängern Sie auf den nächsten Tag nach dem Wochenende. Im Folgenden lernen Sie beide Möglichkeiten kennen.
Eine Möglichkeit der überprüfung, ob es sich nun um einen Wochentag oder um einen Samstag oder Sonntag handelt, ergibt sich aus folgender Tatsache: Wenn man das Datum eines Tages kennt, kann man mit einer entsprechenden Funktion ermitteln, um welchen Wochentag es sich handelt.
Dabei handelt es sich um die so genannte Weekday-Funktion. Probieren Sie die Funktion einmal im Testfenster aus, z. B. mit dem folgenden Aufruf:
Debug.Print Weekday("17.5.2001")
Im Testfenster erscheint daraufhin eine Zahl – die Fünf. Dabei handelt es sich eine VBA-Konstante, die Sie entsprechend Tab. 1 den Wochentagen zuordnen können.
Wochentag |
Konstante |
Sonntag |
1 |
Montag |
2 |
Dienstag |
3 |
Mittwoch |
4 |
Donnerstag |
5 |
Freitag |
6 |
Samstag |
7 |
Tab. 1: Wochentage und ihre Konstanten
Wenn Sie nun das Fristende nach hinten verschieben wollen, falls es auf ein Wochenende fällt, passen Sie die Funktion entsprechend an:
Function Fristende(Fristanfang As Date, Fristdauer As Long) As Date Fristende = Fristanfang + Fristdauer Do While Weekday(Fristende) = 7 _ Or Weekday(Fristende) = 1 Fristende = Fristende + 1 Loop End Function
Die Funktion überprüft nun, ob der Wochentag des letzten Tages der Frist ein Samstag oder Sonntag ist. Falls ja, verschiebt sie das Ende der Frist um einen Tag nach hinten.
Problem der Feiertage
Anders als bei den Wochenenden liegt die Problematik der Feiertage. Während ein Samstag oder Sonntag leicht über die Weekday-Funktion zu identifizieren ist, fällt das bei Feiertagen nicht so leicht.
Um zu überprüfen, ob der letzte Tag der Frist auf einen Feiertag fällt, benötigt man eine Auflistung der Feiertage, am besten in Tabellenform.
Function IstFeiertag(Datum As Date) As Boolean IstFeiertag = True If IsNull(DLookup("Feiertag", "Feiertage", "[Datum] like ''" & Datum & "''")) Then IstFeiertag = False End If Function Fristende(Fristanfang As Date, Fristdauer As Long) As Date Fristende = Fristanfang + Fristdauer Do While Weekday(Fristende) = 7 Or Weekday(Fristende) = 1 Or _ IstFeiertag(Fristende) = True Fristende = Fristende + 1 Loop
Hinweis
Im Beitrag Feiertage ermitteln mit Access des vorliegenden Heftes erfahren Sie einiges über Feiertage und wie man sie ermittelt. Mit den dort vorgestellten Techniken können Sie leicht eine Tabelle der Feiertage erstellen, die Sie im Rahmen des vorliegenden Beitrages verwenden können.
Das folgende Beispiel geht von einer Tabelle mit Feiertagen aus, die lediglich die beiden Felder Feiertag und Datum enthält (siehe Bild 1).
Um herauszufinden, ob es sich bei dem Fristende um einen Feiertag handelt, verwenden Sie die DLookup-Funktion von Access.
Mit der Funktion können Sie herausfinden, ob es in einer Tabelle einen Datensatz gibt, der einen bestimmten Wert enthält.
Dazu verwenden Sie die Funktion auf folgende Weise:
Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...
den kompletten Artikel im PDF-Format mit Beispieldatenbank
diesen und alle anderen Artikel mit dem Jahresabo