14. december 2007 - 18:22Der er
10 kommentarer og 1 løsning
Nr. på uge
Hej
Jeg har problemer med at få funktionen Format til at virke. Hvordan kan det være at følgende giver resultatet, Uge 53, det er noget sludder, eller hvad?
Function WOY(MyDate As Date) As Integer ' Week Of Year WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays) If WOY > 52 Then If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1 End If End Function
Yessir. Der er fejl i Microsofts ugeberegning. Det har der været i flere Access versioner; men i stedet for at rette fejlen, har de vist, hvordan man kan programmere sig ud af roderiet. Suk!
Ok kabbak... Efter mit svar til mugs, kogte jeg lidt på tanken og kom frem til følgende:
Dim intWeekNo As Integer, intDayNo As Integer
intWeekNo = Val(Format("30-12-2007", "WW", vbMonday, vbFirstFourDays)) intDayNo = Val(edtUge = Format("31-12-2007", "W", vbMonday, vbFirstFourDays)) If (intWeekNo > 52) And (intDayNo < 3) Then intWeekNo = 1 End If edtUge = Str(intWeekNo)
Jeg har selvfølgelig ikke lavet intensive tests af funktionen i den ole dll fil Microsoft beskriver, men umidelbart virker min egen fremgangsmåde, men jeg kan se, at du bruger lidt fra Microsoft's side.
Hvis man helt vil undgå diverse builtin funktioner:
Function WeekNumber(year As Integer, mon As Integer, day As Integer) As Integer Dim a, y, m, JD, d4, L, d1 As Long a = (14 - mon) \ 12 y = year + 4800 - a m = mon + 12 * a - 3 JD = day + (153 * m + 2) \ 5 + 365 * y + y \ 4 - y \ 100 + y \ 400 - 32045 d4 = (((JD + 31741 - JD Mod 7) Mod 146097) Mod 36524) Mod 1461 L = d4 \ 1460 d1 = ((d4 - L) Mod 365) + L WeekNumber = d1 \ 7 + 1 End Function
du har fuldstændig ret, din funktion er grim :) og, for mig i hvertfald, intetsigende. Alle de konstante du bruger fortæller ikke ret meget om hvad der sker. Jeg har testet min egen funktion, og den ser ud til at virke, så jeg har renskrevet den hvis nogen kan bruge det til noget.
function WeekNo(strDate as string) as integer Dim intWeekNo As Integer, intDayNo As Integer
intWeekNo = Val(Format(strDate, "WW", vbMonday, vbFirstFourDays)) intDayNo = Val(Format(strDate, "W", vbMonday, vbFirstFourDays)) If (intWeekNo > 52) And (intDayNo < 4) Then intWeekNo = 1 End If WeekNo = intWeekNo end function
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.