01. februar 2009 - 19:14Der er
12 kommentarer og 1 løsning
Beregning af tid
I en tabell "Grund", som innehåller en mængd poster med utførda arbeten, finns fælten "StartDag" och "StartKl", samt "SlutDag" och "SlutKl". Nu vill jag få fram den totala arbetstiden som ligger mellan kl 19.00 och kl 06.00. Alla arbetspass ær påbørjade och avslutade på olika tider. Tacksam før førslag på hur jag kan gå tillvæga.
Nu var det lite mer komplicerat æn att bara rækna ut arbetstiden. Min fråga gællde att rækna ut hur mycket av alla arbetstider som ligger mellan kl 19.00 och kl 06.00. Exempel: Ett arbetspass børjar kl 15.30 och slutar 00.45. Arbetstiden ær 9 timmar och 15 minuter. Den tid som ligger mellan 19.00 och 06.00 ær 6 timmar och 45 minuter. Jag vill alltså ha en funktion som ger total tid från alla arbetspass, dær det finns någon del av arbetstiden ligger mellan kl 19.00 och 06.00. Jag ær inte intresserad av all arbetstid utan bara delen mellan dessa klockslag.
If StartKl < SlutKl Then ' Krydser ikke midnat If SlutKl < KlokkenNitten Then Tid = 0 Else Tid = SlutKl - Max(StartKl, KlokkenNitten) End If Else ' Krydser midnat If StartKl < KlokkenNitten Then Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten) Else Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl) End If Tid = Tid + Min(SlutKl, KlokkenSeks) End If Debug.Print Tid End Sub
Private Function Min(Kl1 As Date, Kl2 As Date) As Date If Kl1 < Kl2 Then Min = Kl1 Else Min = Kl2 End If End Function Private Function Max(Kl1 As Date, Kl2 As Date) As Date If Kl1 > Kl2 Then Max = Kl1 Else Max = Kl2 End If End Function
Hej fdata! Jag tror att jag behøver lite hjælp att få din løsning att fungera. Jag skall anvænda løsningen i ett formulær som heter "Rapport" och dær finns fæltet "OBtid" som i decimaltal skall visa hur mycket av total arbetstid som ligger mellan kl 19.00 och 06.00. Både "Sub BeregnTid()" och funktioner har jag lagt i Moduler. "Tid" ær værdet som jag søker, men hur kallar jag på værdet?
Hej fdata! Jag tror att jag behøver lite hjælp att få din løsning att fungera. Jag skall anvænda løsningen i ett formulær som heter "Rapport" och dær finns fæltet "OBtid" som i decimaltal skall visa hur mycket av total arbetstid som ligger mellan kl 19.00 och 06.00. Både "Sub BeregnTid()" och funktioner har jag lagt i Moduler. "Tid" ær værdet som jag søker, men hur kallar jag på værdet?
Konstanterne og Debug konstruktionen var udelukkede for at belyse værdierne fra dit eksempel.
I din situation skal koden se ud som her:
Function BeregnTid(StartKl As Date, SlutKl As Date) As Single Const KlokkenNitten = #7:00:00 PM# Const KlokkenSeks = #6:00:00 AM#
Dim Tid As Date
If StartKl < SlutKl Then ' Krydser ikke midnat If SlutKl < KlokkenNitten Then Tid = 0 Else Tid = SlutKl - Max(StartKl, KlokkenNitten) End If Else ' Krydser midnat If StartKl < KlokkenNitten Then Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten) Else Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl) End If Tid = Tid + Min(SlutKl, KlokkenSeks) End If BeregnTid = Hour(Tid) + Minute(Tid) / 60 End Function
Du kan så beregne OBtid ved: Me.OBtid = BeregnTid(Me.StartKl, Me.SlutKl) som skal lægges i 3 hændelser: - VedAktuel (OnCurrent) - StartKl EfterOpdatering (StartKl_AfterUpdate) - SlutKl EfterOpdatering (SlutKl_AfterUpdate)
Jag har nu testat din løsning och den fungerar næstan perfekt. Om ett arbetspass børjar kl 04.00 så skall funktionen ge 2 tim, eftersom dessa ligger inom tiden 19.00 - 06.00. Detta fungerar inte.
Function BeregnTid(StartKl As Date, SlutKl As Date) As Single Const KlokkenNitten = #7:00:00 PM# Const KlokkenSeks = #6:00:00 AM#
Dim Tid As Date
If StartKl < SlutKl Then ' Krydser ikke midnat If SlutKl < KlokkenNitten Then If StartKl < KlokkenSeks Then Tid = Min(SlutKl, KlokkenSeks) - StartKl Else Tid = 0 End If Else Tid = SlutKl - Max(StartKl, KlokkenNitten) End If Else ' Krydser midnat If StartKl < KlokkenNitten Then Tid = DateAdd("n", 1, #11:59:00 PM# - KlokkenNitten) Else Tid = DateAdd("n", 1, #11:59:00 PM# - StartKl) End If Tid = Tid + Min(SlutKl, KlokkenSeks) End If BeregnTid = Hour(Tid) + Minute(Tid) / 60 End Function
Jag ær mycket nøjd med din løsning och det fungerar. Om du ger mig ett svar så får du dina points. Jag har en fortsøttning på berækningen av tiden som skall ta hænsyn till vilken veckodag det ær och nær en helgdag finns mitt i veckan. Detta ær vært mera points så jag antar att jag får upprætta en ny fråga om detta.
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.