20. januar 2009 - 17:21Der er
10 kommentarer og 1 løsning
Start ugenr med lørdag
Til beregning af hvor mange dage der er i hver uge, benytter jeg nedenstående funktion :
Function DaysInWeek(StartDate As Date, EndDate As Date, WeekNo As Integer) As Integer
Dim RunningDate As Long DaysInWeek = 0 If EndDate > StartDate Then RunningDate = StartDate Do While RunningDate <= EndDate If DatePart("ww", RunningDate) = WeekNo Then DaysInWeek = DaysInWeek + 1 End If RunningDate = RunningDate + 1 Loop End If
End Function
Jeg har behov for at beregningen foretages fra lørdag til lørdag, og ikke som nu søndag til søndag.
firstdayofweek defaulter til søndag (vbSunday). Brug vbSaturday.
Pas i øvrigt på: Access har problemer med beregning af ugenr. Din kode vil sikkert svigte omkring årsskiftet et af de kommende år. Det var i hvert fald tilfældet i 2003 og 2007. For at være helt sikker, er du nødt til at lave en workaround i stil med:
Function KorrektUgeNr(Dato As Date) As Integer Dim UgeNr As Integer Dim DagNr As Integer
UgeNr = Val(Format(Dato, "WW", vbMonday, vbFirstFourDays)) DagNr = Val(Format(Dato, "W", vbMonday, vbFirstFourDays)) If (UgeNr > 52) And (DagNr < 4) Then UgeNr = 1 End If KorrektUgeNr = UgeNr End Function
Tjah. Det er jo en helt anden - og mere tricky - sag. Jeg er bange for at du skal have splittet de enkelte records op i et antal, der svarer til "antal dage". I dit eksempel vil hver record altså give 8 records.
Opret en tabel ved navn Datoer med 2 felter - ID (Autonummerering) - Dato (Dato og klokkeslæt)
Kør så:
Sub DanDatoer() Dim IndRst As Recordset Dim UdRst As Recordset Dim i As Integer
Set IndRst = CurrentDb.OpenRecordset("Registreringer") Set UdRst = CurrentDb.OpenRecordset("Datoer")
With IndRst Do Until .EOF
For i = 0 To .Fields("AntalDage") UdRst.AddNew UdRst.Fields("Dato") = IndRst.Fields("Dato") + i UdRst.Update Next i
.MoveNext Loop End With IndRst.Close UdRst.Close Set IndRst = Nothing Set UdRst = Nothing End Sub
(ret selv tabel- og feltnavne)
Herefter opretter du en forespørgsel, der ser på tabellen Datoer. - Træk de to felter ned i gitteret - Klik på sigma-knappen (omdan til sum-forespørgsel) - Under ID vælger du Antal - Under Dato vælger du Grupper efter (og Sorter stigende) - og så fyrer du den af ...
fdata > jeg kan se at du er mester for den modulkode jeg nu er løbet ind i problemer med. Hvis summen af Fields("AntalDage") er negativt behandles rækken ikke :-(
Det er først for nyligt jeg er begyndt at behandle negative data, så det har ikke været aktuelt da vi lavede koden i sin tid, men det det desværre nu.
En registering består/kan bestå af en tilgang på et tidspunkt og i nogen tilfælde en afgang på et andet tidspunkt ...
Dvs. jeg kan have en tilgang med en given ordre dato/periode som skal tælle 1 hvor hver dag i perioden, og tilsvarende -1 i samme periode på et andet ordretidspunkt hvis kunden efterfølgende annullerer ordren ...
Det er lige som om at negative værdier ignoreres i den hidtidige modulkode
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.