ich habe folgendes Problem.
Über ein UserForm gibt der mitarbeiter Kalenderwoche und tag ein.
Jetzt soll mir in der Ausgabe aber folgendes erscheinen.
Eingabe :
KW = 34
Montag
Ausgabe:
Montag; 22.08.2016
Gruß Armin
Sub ff()
MsgBox GetDateFromWeek(26 + 1, vbTuesday) ' Im Jahr 2016 muss zu der Kalenderwoche noch eine _
_
Woche hinzugefügt werden da die KW1 nicht ab dem 1.1.2016 anfängt sondern 4.1.2016
End Sub
Public Function GetDateFromWeek(ByVal nWeek As Integer, _
Optional ByVal nDayOfWeek As VBA.VbDayOfWeek = vbMonday, _
Optional ByVal nYear As Integer = -1) As Date
Dim nCurWeek As Integer
Dim vStart As Variant
Dim vMonday As Variant
Dim vSunday As Variant
Dim nDay As Integer
' Kein Jahr angeben? Dann aktuelles Jahr verwenden!
If nYear = -1 Then nYear = Year(Now)
' aktuelle Woche im Jahr nYear ermitteln
vStart = DateSerial(nYear, Month(Now), Day(Now))
nCurWeek = Val(Format$(vStart, "ww", vbMonday))
' Datum der gewünschten Woche ermitteln
vStart = DateAdd("ww", nWeek - nCurWeek, vStart)
' 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 MoInKW(KW As Integer, Jahr As Integer) As Date
MoInKW = CDate("4.1." & Jahr) + KW * 7 - 7 - CDate("2.1." & Jahr) Mod 7
End Function
GrußFunction TagInKW(KW As Integer, Jahr As Integer, Optional Tag As String = "Mo") As Date
TagInKW = CDate("4.1." & Jahr) + KW * 7 - 7 - CDate("2.1." & Jahr) Mod 7
TagInKW = TagInKW + InStr(1, " modimidofrsaso", Left(Tag, 2), 1) / 2 - 1
End Function
Gruß