Avatar billede _on_ Nybegynder
14. december 2007 - 18:22 Der 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?

Format("31-12-2007", "WW", vbMonday, vbFirstFourDays)

Mvh
ON
Avatar billede mugs Novice
14. december 2007 - 19:44 #1
Den er god nok. Bruger slev denne som også giver uge 53:

Format(Expression:=FELTNAVN, Format:="ww")
Avatar billede _on_ Nybegynder
14. december 2007 - 19:56 #2
Ok, men det er ikke rigtigt, fordi 31-12-2007, er uge nr. 1
????

Mvh
ON
Avatar billede kabbak Professor
14. december 2007 - 19:56 #3
Public Sub TEST()
Uge = WOY("31-12-2007")
End Sub

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


http://support.microsoft.com/default.aspx?scid=http://support.microsoft.com:80/support/kb/articles/q200/2/99.asp&NoWebContent=1
Avatar billede fdata Forsker
14. december 2007 - 20:18 #4
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!
Avatar billede _on_ Nybegynder
14. december 2007 - 20:24 #5
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.

Mvh
ON
Avatar billede _on_ Nybegynder
14. december 2007 - 20:26 #6
Ups, jeg har vist selv en bug :)
intDayNo skal da vist være < 4 hehe....

Mvh
Avatar billede arne_v Ekspert
15. december 2007 - 02:08 #7
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
Avatar billede petersen7913 Forsker
16. december 2007 - 20:32 #8
Jeg sidder tilfældigvis med samme problem lige nu ;-)

Jeg har prøvet alle forslag af, det eneste jeg kan få til at fungere er kabbak's første forslag med VOY.
Avatar billede arne_v Ekspert
17. december 2007 - 04:26 #9
er du sikker ?

jeg testede da min grimme funktion i Access !
Avatar billede _on_ Nybegynder
18. december 2007 - 07:28 #10
arne_v

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

Mvh
ON
Avatar billede _on_ Nybegynder
14. januar 2008 - 10:24 #11
:)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester