08. august 2006 - 23:22Der er
3 kommentarer og 1 løsning
Udskriv "07-08-2006 til 13-08-2006" ud fra ugetal
Hejsa :)
Jeg så et spørgsmål i php sektionen som jeg faktisk også har forsøgt at løse i VBA (Excel). Jeg har en sub knyttet til en knap. Når man trykker på den knap skal subben spørge brugeren om et ugenummer (kan jeg sagtens), men også finde startdatoen i denne uge og gerne også slutdatoen. Hvordan gør jeg det? :S
Hvordan kan jeg udskrive data_fra - dato_til ud fra et ugenummer (f.eks. "07-08-2006 til 13-08-2006")
Function ugestart(ugenr As Integer, Optional Årstal As Variant) As Date Dim workDate As Date Dim workUge As Integer Dim workÅr As Integer If IsMissing(Årstal) Then workÅr = Year(Date) Else If Not IsNumeric(Årstal) Then workÅr = Year(Date) Else workÅr = Årstal End If End If
workDate = DateSerial(workÅr, 1, 1) If Weekday(workDate, vbUseSystemDayOfWeek) > 1 Then workDate = DateAdd("d", 8 - Weekday(workDate, vbUseSystemDayOfWeek), workDate) End If ' workdate indeholder nu årets første mandag... workUge = CInt(Format(workDate, "ww", vbUseSystemDayOfWeek)) ' Efter europæisk standard er uge 1 den første uge i året, hvor med en torsdag. If Weekday(DateSerial(workÅr, 1, 1), vbUseSystemDayOfWeek) > 4 Then workUge = workUge - 1 End If ugestart = DateAdd("ww", ugenr - workUge, workDate) End Function
Den kan man kalde med en eller to parametre. Hvis man ikke angiver et årstal, bruges indeværende år.
?ugestart(27) 03-07-2006
Når man først har startdatoen er det jo let nok at angive slutdatoen, da det må være startdatoen + 6 dage:
?ugestart(27) & " til " & DateAdd("d", 6,ugestart(27)) 03-07-2006 til 09-07-2006
Eller, hvis du også angiver året:
?ugestart(27,2005) & " til " & DateAdd("d", 6,ugestart(27,5)) 04-07-2005 til 10-07-2005
Ved nærmere eftertanke burde jeg nok for en sikkerheds skyld have brugt vbMonday i stedet for vbUseSystemDayOfWeek. På en dansk windows installation er der ingen forskel, da en uge her er sat til at starte på en mandag. Men man kan jo ikke være absolut sikker på, at der ikke er blevet pillet ved standardinstillingerne. Hvis man derfor vil være absolut sikker på, at beregningerne er rigtige, så erstat vbUseSystemDayOfWeek med vbMonday:
Function ugestart(ugenr As Integer, Optional Årstal As Variant) As Date Dim workDate As Date Dim workUge As Integer Dim workÅr As Integer
'Hvis årstallet ikke er specificeret eller ikke er numerisk, bruges indeværende år If IsMissing(Årstal) Then workÅr = Year(Date) Else If Not IsNumeric(Årstal) Then workÅr = Year(Date) Else workÅr = Årstal End If End If
workDate = DateSerial(workÅr, 1, 1) If Weekday(workDate, vbMonday) > 1 Then workDate = DateAdd("d", 8 - Weekday(workDate, vbMonday), workDate) End If
' workdate indeholder nu årets første mandag... workUge = CInt(Format(workDate, "ww", vbMonday))
' Efter europæisk standard er uge 1 den første uge i året med en torsdag. If Weekday(DateSerial(workÅr, 1, 1), vbMonday) > 4 Then workUge = workUge - 1 End If
ugestart = DateAdd("ww", ugenr - workUge, workDate) 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.