08. august 2006 - 23:22
Der 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")
Håber nogen kan hjælpe. :)
09. august 2006 - 00:58
#1
En funktion som denne, vil give dig startdatoen:
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
(bemærk, at året kan angives både som 5 og 2005)
09. august 2006 - 01:18
#2
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