Problemstellung:
immer wieder ein Thema ist im Forum der Umgang mit Kalenderwochen.
Ermittlung der Kalenderwoche für Datum nach DIN 1355 und Ermittlung eines Datums und
Wochentages aus einer Kalenderwoche.
Voraussetzungen:
Das Bsp ist ab A97 lauffähig.
Funktionsweise:
Die Errechnung der Kalenderwoche (KW) aus einem Datum geht ja noch.
Wobei die pure Formatierung eines Datums in die KW auch Fehler bei Berechnung von
Jahreswechseln beinhaltet.
Syntax:
Dim varKW As Variant varKW = Format("DeinDatum", "ww", vbMonday) 'oder varKW = Format("DeinDatum", "ww/yyyy", vbMonday)
Genauere Ergebnisse erhält man dann schon mit speziellen Funktionen:
Function Kalenderwoche(XDatum As Variant, fModus As Boolean) As String Dim x, y, z Kalenderwoche = "" If Not IsDate(XDatum) Then Kalenderwoche = "": Exit Function XDatum = CDate(XDatum) x = Year(XDatum) z = Format(XDatum, "ww", vbMonday, vbFirstFourDays) y = Int((XDatum - DateSerial(Year(XDatum), 1, 1) + _ ((Weekday(DateSerial(Year(XDatum), 1, 1)) + 1) Mod 7) - 3) / 7) + 1 If y = 0 Then z = Format(DateSerial(x - 1, 12, 31), "ww", vbMonday, vbFirstFourDays) If z >= 52 Then x = x - 1 ElseIf y > 52 And (Weekday(DateSerial(x, 12, 31)) - 1) Mod 7 <= 3 Then If Format(XDatum + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then z = 1 If z = 1 Then x = x + 1 End If If fModus = True Then Kalenderwoche = Right("00" & z, 2) & "/" & Right("0000" & x, 4) Else Kalenderwoche = Right("00" & z, 2) End If End Function
In dieser Funktion werden Jahreswechsel richtig berechnet.
Folgende Argumente müssen übergeben werden:
XDatum= ein formatiertes Datum (sonst gibt die Funktion "" zurück)
boolModus True =Format "ww/jjjj", False =Format "ww"
Syntax:
Dim Testdatum as Date Dim strKW as String Testdatum = #12/31/2002# ' Test mit 31.12.2002 strKW = Kalenderwoche(Testdatum, True)
Jetzt kommen wir aber zur rekursiven Berechnung, sprich ein Datum aus einer KW zu ermitteln.
Drei Argumente werden benötigt, die KW, das Jahr und den Wochentag.
Die Funktion "GetDateFromWeek" gibt dann das Datum zurück.
Listing s. Bsp-DB
Argumente:
nWeek = KW z.B 50
nDayOfWeek = Wochentag z.B. 1=Montag
nYear =Jahr z.B. 2003
Jetzt kann man noch alle Tage der gewählen KW in einem Listenfeld anzeigen lassen. (s. Bsp-DB)
Das Füllen des Listenfeldes soll hier aber jetzt nicht näher beschrieben werden,
da dies ein extra Thema ergibt.
Berechnung von Kalenderwochen (DIN 1355)
ab A97
Die Zip-Datei enthält ein Version für A97 und eine ab A00
Ähnliche Artikel
Weiterlesen...