Avatar billede Nervatos Seniormester
10. januar 2020 - 14:10 Der 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.
Avatar billede Jan K Ekspert
10. januar 2020 - 16:39 #1
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?
Avatar billede Nervatos Seniormester
10. januar 2020 - 21:16 #2
Start dagen starter samtidig med B2, så B2 og C2 følges af. Så er det en lørdag d. 11/1 så vil det så ledes ud:

B2: 11-01-20
C2: 22:30
D2: 05:30

Så vil man altid vide, at tiden (C2) starter sammen med datoen (B2). Slut tiden (D2), kan både være samme dag men også efterfølgende dag.

Håber det gav lidt mere mening.
Avatar billede Jan K Ekspert
10. januar 2020 - 22:29 #3
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.
Avatar billede Nervatos Seniormester
10. januar 2020 - 23:58 #4
Det bliver de også via C2 og D2, der er møde og gå hjem tider. Tillæg af timer, bliver lagt oven i den samme tidsperiode.

Så hvis du har søndag til mandag fra 22:30 - 05:25 giver 5:30 i tillæg oven i den nuværende tid i mellem C2 og D2.
Avatar billede Jan K Ekspert
11. januar 2020 - 06:35 #5
Xet er jeg med på, menhvis det skal kunne laves med VBA, skal alle de perioder, der kan udløse tillæg være kodet ind.
Avatar billede Nervatos Seniormester
11. januar 2020 - 09:52 #6
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.
Avatar billede Jan Hansen Ekspert
11. januar 2020 - 13:44 #7
B2=11-01-2020
C2=13:00
D2=14:00

Hvorledes kan man vide om der er gået 1 eller 25 timer?
Avatar billede Nervatos Seniormester
11. januar 2020 - 13:46 #8
Vagterne er aldrig over 24 timer.
Avatar billede Jan Hansen Ekspert
11. januar 2020 - 17:50 #9
Mon noget ala denne udf

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
Avatar billede Nervatos Seniormester
11. januar 2020 - 20:31 #10
Hej Jan

Tak for dit forslag, men uanset hvad jeg skriver, så giver resultatet 0.
Avatar billede Jan Hansen Ekspert
11. januar 2020 - 21:33 #11
Avatar billede Nervatos Seniormester
11. januar 2020 - 21:54 #12
Den regner desværre forkert Jan.

Dato            Start    Slut            Tillægstimer    Resultat   
11-01-2020    22:30    05:30    15:30        07:00
12-01-2020    22:30    05:25    06:55        05:30


Hvor jeg har skrevet resultat, var det - som den oprigtigt skulle haft givet.
Avatar billede Jan Hansen Ekspert
11. januar 2020 - 22:38 #13
prøv nu:
Avatar billede Nervatos Seniormester
12. januar 2020 - 10:32 #14
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?
Avatar billede Jan Hansen Ekspert
12. januar 2020 - 10:54 #15
Det er nok smartest at lave med en hvis!!
Avatar billede Nervatos Seniormester
13. januar 2020 - 12:49 #16
Super tusind tak for hjælpen Jan!
Avatar billede Jan Hansen Ekspert
13. januar 2020 - 14:14 #17
Velbekomme
Avatar billede Nervatos Seniormester
14. januar 2020 - 16:04 #18
Hej Jan

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.

https://www.dropbox.com/s/1vwlu8z8mbffezg/Till%C3%A6gstimer.xlsm?dl=0

Ved ikke, om du kan løse det.
Avatar billede Jan Hansen Ekspert
14. januar 2020 - 17:28 #19
Avatar billede Nervatos Seniormester
15. januar 2020 - 09:49 #20
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.
Avatar billede Nervatos Seniormester
15. januar 2020 - 10:25 #21
Har også fundet ud af, hvis man formaterer arket til 1904 systemet, så fungere din tider ikke. Hvorfor ikke?
Avatar billede Jan Hansen Ekspert
15. januar 2020 - 17:26 #22
Kan Ikke hjælpe dig videre, har ikke tid lige for øjeblikket, håber der er en anden der kan hjælpe!!

Jan
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester