10. januar 2020 - 14:10Der er
21 kommentarer og 1 løsning
VBA til tidsregistrering
Hej med Jer
Jeg har en lille udfordring i at udregne tillæg. Det går fint hvis det kun er pr. dag. men når tiden kører over i hinandens dage, så fungere det ikke for mig.
Da jeg kun har mulighed for én celle, så tænker jeg en VBA løsning vil være den bedste.
Der skal tælles tillæg i forhold til antal timer fra lørdag kl 14 til mandag kl 04.
Jeg har i følgende: B2 = Dato (01-01-20) C2 = Check in (13:00) D2 = Check ud (18:30)
Hvis arbejdstiden er lørdag kl 12:00 til 16:00 så giver det kun 2 timer i tillæg. hvis arbejdstiden søndag er 23:00 til mandag kl 06:00 så giver det 5 timer.
Andet eksempel er, hvis du har en tid lørdag som går over til søndag. F.eks. 22:30 - 02:30 så skal den give 4 timer. Har du søndag til mandag fra 22:30 - 05:25 så skal den give 5:30 for den skal ikke tælle mere med efter kl 04:00 mandag.
Håber det giver mening og der er mulighed for en løsning. God dag og godt nytår.
Du er nok nødt til at være mere præcis i din beskrivelse, eller er det alle de mulige kombinationer af arbejdstider, du har beskrevet her? En anden ting, hvis dato er 1-1-20, check in 13:00 og ckeck ud 18:30, hv8rdan kan man så se, om det er samme dag eller dagen efter?
Hvis det skal kunne laves, skal alle mulige kombinationer af møde og gåhjem tider vlre kendt, og det samme skal de præcise perioder, der udløser tillæg.
Jeg er ikke sikker på, at jeg forstår budskabet Jan. For jeg skal blot finde antal timer og det er i mellem lørdag klokken 14 til mandag klokken 04:00.
Beklager, hvis jeg ikke er tydelig nok i hvad jeg søger.
Function TillægsTimer(Dato As Variant, StartTid As Variant, SlutTid As Variant) As Date Application.Volatile Dim mDato As Date Dim Start As Date, Slut As Date Dim mStartTime As Date, mSlutTime As Date mStartTime = TimeValue("14:00") mSlutTime = TimeValue("6:00") mDato = Dato mStartTime = Dato + mStartTime Start = Dato + StartTid If StartTid > SlutTid Then Slut = Dato + SlutTid + 1 mSlutTime = Dato + mSlutTime + 1 Else Slut = Dato + SlutTid mSlutTime = Dato + mSlutTime End If If Weekday(mDato, vbTuesday) > 4 Then If Weekday(Start, vbTuesday) = 5 Then If Slut > mStartTime Then TillægsTimer = Slut - mStartTime Else TillægsTimer = Slut - Start End If ElseIf Weekday(Slut, vbTuesday) = 7 Then If Slut > mSlutTime Then TillægsTimer = mSlutTime - Start Else TillægsTimer = Slut - Start End If Else TillægsTimer = Slut - Start End If End If End Function
Ser ud til at virke Jan, det er perfekt. Kan du lave sådan, at hvis tiden er 00:00 så bliver cellen blot blank i VBA scriptet - eller skal jeg lave en hvis i stedet for?
Jeg er stødt på et problem med koden, den udregner også timer om mandagen - umiddelbart er det - hvis der intet er om søndagen. Orange er weekend og helligdag.
Tak Jan, det ser bedre ud. Hvis der skal tilføjes HELLIGEDAGE(mDato) <> "", således at en helligdag bliver talt med som "søndag", hvordan får jeg det til at passe?
ElseIf Weekday(Slut, vbTuesday) = 7 Or HELLIGEDAGE(mDato) <> "" Then
Den giver egentlig det rigtige resultat, hvis tiden går over midnat. Men hvis det er i løbet af dagen så tæller den slet ikke.
Kan Ikke hjælpe dig videre, har ikke tid lige for øjeblikket, håber der er en anden der kan hjælpe!!
Jan
Synes godt om
Ny brugerNybegynder
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.