Hallo Tommy,
vielen Dank für die rasche Antwort. Ich habe mir eh gedacht, dass die Funktion ausgereift ist deswegen ist es für mich so schwierig das nachzuvollziehen. Ich muss vorausschicken, dass ich in Access-VBA nicht so bewandert bin. Untenstehend der Code, denn ich in mein Modul mdlGetDateFromWeek eingetragen habe:
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Option Compare Database
Option Explicit
Public Function GetDateFromWeek(ByVal nWeek As Integer, _
nDayOfWeek As Integer, _
Optional ByVal nYear As Integer = -1)
'*******************************************
'Name: GetDateFromWeek (Function)
'Purpose:
'Author: Dieter Otter, angepasst an VBA von Thomas Keßler
'Date:
'Called by:
'Calls:
'Inputs:
'Output:
'Example: vMonday = GetDateFromWeek(12, vbMonday, 2003)
'*******************************************
Dim nCurWeek As Integer
Dim vStart As Variant
Dim vStart1 As Variant
Dim vMonday As Variant
Dim vSunday As Variant
Dim nDay As Integer
Select Case nDayOfWeek
Case 1: nDayOfWeek = vbMonday
Case 2: nDayOfWeek = vbTuesday
Case 3: nDayOfWeek = vbWednesday
Case 4: nDayOfWeek = vbThursday
Case 5: nDayOfWeek = vbFriday
Case 6: nDayOfWeek = vbSaturday
Case 7: nDayOfWeek = vbSunday
End Select
' Kein Jahr angeben? Dann aktuelles Jahr verwenden!
If nYear = -1 Then nYear = Year(Date)
' aktuelle Woche im Jahr nYear ermitteln
vStart1 = DateSerial(nYear, Month(Date), Day(Date))
nCurWeek = Kalenderwoche(vStart1, False)
' Datum der gewünschten Woche ermitteln
vStart = DateAdd("ww", nWeek - nCurWeek, vStart1)
' Wochenanfang ermitteln
nDay = Weekday(vStart, vbMonday)
' Datum des gewünschten Wochentags ermitteln
If nDayOfWeek = vbSunday Then
GetDateFromWeek = DateAdd("d", -nDay + 7, vStart)
Else
GetDateFromWeek = DateAdd("d", -nDay + nDayOfWeek - 1, vStart)
End If
End Function
Function Kalenderwoche(XDatum As Variant, fModus As Boolean) As String
' Gibt Ein Datum als "ww\jjjj" String zurück
' Wenn eine Wochennummer in ein unterschiedliches Jahr fällt,
' so wird dies berücksichtigt
' d.h. 31.12.2002 = 01\2003 bzw. 1.1.1999 = 53\1998
Dim x, Y, Z
Kalenderwoche = ""
If Not IsDate(XDatum) Then Kalenderwoche = "": Exit Function
XDatum = CDate(XDatum)
x = Year(XDatum)
Y = Month(XDatum)
Z = CInt(Format(XDatum, "ww", vbMonday, vbUseSystem))
If Z > 52 Then
If Format(XDatum + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then Z = 1
End If
If Y = 12 And Z < 40 Then x = x + 1
If Y = 1 And Z > 10 Then x = x - 1
If fModus = True Then
Kalenderwoche = Right("00" & Z, 2) & "/" & Right("0000" & x, 4)
Else
Kalenderwoche = Right("00" & Z, 2)
End If
End Function
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Wenn ich dieses Modul in einer Message Box wie von Dir beschrieben ausgebe erhalte ich den 28.12.2009. Das muss irgendwie am Code liegen oder an meinem Computer aber das Resultat bekommen auf drei unterschiedlichen PCs. Ich habe den Code kopiert, selber würde ich auf so etwas niemals kommen, dafür sind meine VBA Kenntnisse viel zu schwach. Habe ich da etwas falsch gemacht? Ich bin für jede Tipp dankbar, die Funktion wäre für meine Bedürfnisse perfekt geeignet.
Ernst