Unsere Webseiten benötigen JavaScript. Dies scheint in Ihrem Browser jedoch deaktiviert zu sein.

News & Tipps zu Microsoft Access

Lesen Sie hier einige der besten Beiträge aus SmartTools Access Weekly sowie ausgewählte Inhalte anderer E-Mail-Newsletter von SmartTools Publishing rund um Microsoft Access.

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.