Deze vraag staat al een tijdje open en het is eigenlijk een ontzettend leuk probleem.
Access heeft een hele batterij functies in zich om te freubelen met datums, maar deze zit er natuurlijk net niet bij!
Maar met de beschikbare functies kun je natuurlijk wel zelf iets maken dat het gewenste resultaat geeft.
Ik heb een functie voor je geschreven die volgens mij precies doet wat je wilt:
Public Function fnGetMaandag(intWeeknr As Integer, intJaar As Integer) As String
Dim intTempWeeknr As Integer
Dim intTempDate As Date
Dim intTempDag As Integer
Dim intMaand As Integer
Dim intDagnr As Integer
'In Nederland is week 1 de eerste week waarin de donderdag in januari valt.
'Het format statement van Access kent hiervoor de de parameter firstweekofyear=vbFirstFourDays
'Van deze kennis kunnen we gebruik maken om een datum in de week met dat weeknummer te maken.
'Het jaar hebben we al het gaat om de maand en de dag.
'Eerst even de maand bepalen
intDagnr = 0
intTempWeeknr = 1
intTempDate = "01-01-" & CStr(intJaar)
Do While intTempWeeknr < intWeeknr
intTempDate = DateAdd("d", 7, intTempDate)
intTempWeeknr = Format(intTempDate, "ww", vbFirstFourDays)
Loop
intMaand = Format(intTempDate, "m", vbFirstFourDays)
'intTempDate bevat nu een datum in de week die we moeten hebben.
'Nu nog even bepalen welke dag of intTempDate is en dan kunnen we de maandag bepalen.
'Dagen hebben in access nummers, dus daar kunnen we gebruik van maken.
'Zondag = 1, maandag = 2 etc.
'Bij ons is zondag de eerste dag van de week, daar moeten we wel rekening meehouden!
intTempDag = WeekDay(intTempDate, vbMonday)
intTempDate = DateAdd("d", -1 * (intTempDag - vbMonday + 1), intTempDate)
fnGetMaandag = Format(intTempDate, "dd-mm-yyyy")
End Function
Stel je wilt de maandag van week 14 in het jaar 2003, dan roep je de functie als volgt aan:
dim strDatum as String
strDatum = fngetmaandag(14,2003)
strDatum krijgt dan de waarde 31-03-2003, wat volgens mij de juiste datum is.