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 unter A97,A00, AXP, A03 lauffähig, unter A07 wurde es nicht getestet.
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.
Download nur für registrierte User
|
|
|
Berechnung von Kalenderwochen (DIN 1355) Die Zip-Datei enthält ein Version für A97 und eine ab A00 |
Erstellt am Dateigröße Downloads |
03.01.2008 54.06 KB 4122 |
||
Twitter
Myspace
Mister Wong
Webnews
Icio
Oneview
Yigg
Seekxl
FAV!T
Kledy
Bookmarks.cc
Favoriten
Linkarena
Digg
Del.icio.us
Simpy
Yahoo
Folkd
Spurl
Googlize this
Blinklist
Facebook
Wikio



Kommentare
super Danke für den Tipp, doch irgendwas mache ich falsch.
Bei
Debug.Print Kalenderwoche(2 010-01-18, False) gibt keine Ausgabe, sollte aber KW 03 sein.
Die Funktion habe ich als Modul eingefügt.
Ich brauche nur die KW, also False.
Vielen Dank im Voraus.
MAG
schreibe:
Code:
Debug.Print Kalenderwoche("18.01.2010", False)Dann erhälst Du als Ergebnis "03"
Gruß Tommy
Alle Kommentare dieses Beitrages als RSS-Feed.