Beitrag aus SmartTools Access Weekly
Datumsbereich einer Kalenderwoche ermitteln
Access 365 2024 2021 2019 2016 2013 2010
Für einige Anwendungen müssen Sie den Zeitraum einer Kalenderwoche exakt bezeichnen, um beispielweise Informationen wie "Lieferung 43. KW 2025 (20. bis 24. Oktober)" ausgeben zu können. Eine fertige Funktion stellt Access dazu nicht zur Verfügung, aber wir zeigen Ihnen in diesem Tipp, wie Sie mit einer eigenen VBA-Funktion zum Ziel kommen. Sie benötigen eine Funktion, die das Startdatum und somit den Montag der jeweiligen Kalenderwoche ermittelt.
Function KWStartDatum(intKW As Integer, _
intJahr As Integer) As Date
Dim dtStart As Date
Dim dtJahr As Date
KWStartDatum = DateSerial(1980, 1, 1) 'Default: 1.1.1980
If Not IsDate(DateSerial(intJahr, 1, 1)) Then
intJahr = Year(Now) 'Aktuelles Jahr
End If
If intKW < 1 Or intKW > 53 Then
dtJahr = DateSerial(intJahr, 1, 1) 'ab 1.1.JJJJ
intKW = KW(dtJahr)
dtStart = dtJahr
Else
dtStart = DateSerial(intJahr, 1, 1) 'ab 1.1.JJJJ
End If
Do Until KW(dtStart) = intKW
DoEvents
dtStart = dtStart + 1
Loop
KWStartDatum = dtStart
End Function
Kopieren Sie diese Funktion zunächst in ein Modul Ihres VBA-Projektes.
Wichtig: Ein Bug in älteren VBA-Versionen in den Funktionen "Format()" und "DatePart()" führt dazu, dass eventuell eine Kalenderwoche "53" als Ergebnis geliefert wird, obwohl gemäß DIN 1355/ISO 8601 die Kalenderwoche 1 des Folgejahres korrekt wäre. Die Funktion "KWStartDatum()" arbeitet deshalb mit einem Work-around in Form der Funktion "KW()", die den VBA-Bug, sofern er auftritt, entsprechend korrigiert und die Sie ebenfalls in das Modul Ihres VBA-Projektes kopieren:
Function KW(dtDatum As Date) As Integer
KW = Format(dtDatum, "ww", vbMonday, vbFirstFourDays)
If KW > 52 Then
If Format(dtDatum + 7, "ww", _
vbMonday, vbFirstFourDays) = 2 Then KW = 1
End If
End Function
Statt "DatePart()" oder "Format()" sollten Sie künftig diese Funktion zur Berechnung von Kalenderwochen verwenden, falls Ihre Datenbanken noch mit älteren Versionen von Access eingesetzt werden sollen.
Der Funktion übergeben Sie als Parameter Kalenderwoche und Jahr für die Berechnung des ersten Tages dieser Kalenderwoche. Ausgehend vom angegebenen Jahr wird zunächst eine Variable "dtStart" vom Datentyp "Date" mit dem 1. Januar initialisiert und dann in einer Schleife solange um einen Tag heraufgezählt, bis die zum Datum in "dtStart" berechnete Kalenderwoche der als Parameter übergebenen Kalenderwoche entspricht. Dieses Datum wird dann als Funktionsergebnis zurückgegeben. So liefert zum Beispiel der Aufruf von
dtStart = KWStartDatum(2025, 43)
das Datum "20.10.2025" als Startdatum dieser Kalenderwoche. Darauf basierend können Sie dann zum Beispiel in einem ungebundenen Textfeld eines Berichtes folgenden Ausdruck für die Ausgabe des Zeitraumes einer Kalenderwoche nutzen:
="Lieferung KW " & Me.LiefKW & "/" & Me.LiefJahr & " (" & KWStartDatum(Me.LiefKW, Me.LiefJahr) & " bis " & Format(KWStartDatum(Me.LiefKW, Me.LiefJahr) + 4, "Short Date") & ")"
In diesem Beispiel sind "LiefKW" und "LiefJahr" Felder der Datenbasis mit den Angaben zur Kalenderwoche und dem Jahr einer geplanten Auslieferung. "KWStartDatum()" liefert hier einmal das Startdatum der betreffenden Kalenderwoche wie beispielsweise "20.10.2025". Getrennt durch "bis" wird dann das Startdatum der Kalenderwoche plus 4 Tage (Dienstag, Mittwoch, Donnerstag, Freitag), also zum Beispiel "...bis 24.10.2025" hinzugefügt.