Avatar billede svla Mester
16. juli 2009 - 22:58 Der er 12 kommentarer og
1 løsning

Antal arbejdsdage mellem 2 datoer

Hej !

I forbindelse med excel regneark har jeg oprettet en Userform, hvor der indtastes en startdato og en slutdato, ved OK beregner funktionen <Datediif> forskellen mellem startdato og slutdato i antal år, mdr., dg,.

Spørgsmål:
Er der nogen som kan hjælpe med en VBA kode som kan klare og udregne hvor mange arbejdsdage der er mellem den indtastede startdato og slutdato, - det kan <Datediif> desværre ikke klare.

- Håber der er nogen som kan komme med et godt forslag.
- Jeg kender godt funktionen <Antal.arbejdsdage> som kan gøre det på et Excelark, men venter på en god VBA kode ????
Avatar billede busschou Praktikant
17. juli 2009 - 10:30 #1
Du kan vel bruge tilsvarende funktion i din vba kode?
expression.NetworkDays(Arg1, Arg2, Arg3)

fx
WorksheetFunction.NetworkDays("01-01-2008", "02-02-2008")
Avatar billede svla Mester
17. juli 2009 - 21:28 #2
jeg prøver lige dit forslag og vender retur senere.

Jeg har prøvet flere gange og få lagt en kommentar her på siden, med det er mislykkedes hver gang, - siden fungerer rigtig dårlig
Avatar billede svla Mester
18. juli 2009 - 19:03 #3
Jeg fik det ikke til og virke, uvist af hvilken grund.
Kunne du ikke beskrive lidt bedre hvorledes koden skal se ud.

- Jeg har prøvet flere gange og få lavet en kommentar på siden her men knappen opret Vil ikke fungere.
Avatar billede supertekst Ekspert
19. juli 2009 - 12:32 #4
Vil godt forsøge at strikke et forslag sammen via VBA, der også tager hensyn til skæve helligdage - uanset årstal.

Vedr. problem med at oprette en kommentar - hvilken Internet Explorer anvender du? - hvis version 6 så skift til 7 - har oplevet det samme....
Avatar billede supertekst Ekspert
19. juli 2009 - 14:17 #5
Beregning af arbejdsdage er klar - send en mail (adresse under min profil) så returnerer jeg filen m/VBA-koden.

Offentliggøres herefter.
Avatar billede supertekst Ekspert
03. august 2009 - 22:38 #6
Tilbud gælder stadig...
Avatar billede supertekst Ekspert
05. august 2009 - 11:37 #7
Er fremsendt...
Avatar billede supertekst Ekspert
26. august 2009 - 20:28 #8
Noget nyt?
Avatar billede svla Mester
26. august 2009 - 20:48 #9
Hej !
Har modtaget dit forslag, - det er bare perfekt, det var lige det jeg manglede. Endelig kan jeg blive færdig med mit lille projekt.

Jeg har dog et lille tillægsspørgsmål til dit forslag som jeg lige har forsøgt og løse men det lod sig ikke gøre for mig, det er følgende:
Når din kode har udregnet antallet af arbejdsdage f.eks. 20 dage, hvorledes de 21 dage så ganges med 07:24 time. I excel går det jo ud på og få cellerne formateret rigtigt, men kan det gøres med VBA.

- Dit fremsendte forslag var lige det jeg manglede og bruger.

Læg venlist et svar til point.
Avatar billede svla Mester
26. august 2009 - 20:50 #10
Hej igen

Jeg glemte forresten at jeg nu har skiftet Internet Explore 6.0 til Internet Explore 7.00, og nu fungerer det med svar og kommentar fint.

- Tak for tippet.
Avatar billede supertekst Ekspert
26. august 2009 - 20:54 #11
Selv tak - du får et svar.
Vender tilbage vedr. dit spørgsmål...

Koden i Userform:
Rem EVT. JUSTERING VEDR.:
Rem Grundlovsdag, Juleaftensdag & Nytårsaftensdag
Rem Disse tælles IKKE med som arbejdsdage p.t.
Rem =============================================
Dim hÅr As Integer, påskeDag As Date
Dim hDageFaste As Variant, hDageVar As Variant

Dim fraDag As Date, tilDag As Date
Dim antalArbejdsDage As Integer
Private Sub CommandButton1_Click()                  'Beregn
Dim dag As Date
    fraDag = Me.TextBox1
    tilDag = Me.TextBox2
    hÅr = 0
   
    antalArbejdsDage = 0
   
    For dag = fraDag To tilDag
Rem opsætning af helligdage for året
        If hÅr = 0 Or hÅr <> Year(dag) Then
            påskeDag = beregnPåske(Year(dag))
            opsætningAfHelligDage påskeDag
            hÅr = Year(dag)
        End If
       
Rem undersøg om helligdag
        If erDetHelligdag(dag) = False Then
Rem Hvis nej - test om lør/søn
            If Weekday(dag, vbMonday) < 6 Then
                antalArbejdsDage = antalArbejdsDage + 1
            End If
        End If
    Next dag

    Me.Label4 = antalArbejdsDage
   
End Sub
Public Function beregnPåske(aar)

Rem Beregning af Paaske - 1900 - 2099
Rem =================================
Dim d, E, Q
    b1 = aar Mod 19
    d = 225 - (11 * b1)
   
    If d > 50 Then
        While d > 50
            d = d - 30
        Wend
    End If
   
    If d > 48 Then
        d = d - 1
    End If
   
    E = (aar + Int(aar / 4) + d + 1) Mod 7
   
    Q = d + 7 - E
   
    If Q < 32 Then
        m = "03"
    Else
        m = "04"
        Q = Q - 31
    End If
   
    beregnPåske = CStr(Q) + "-" + m + "-" + CStr(aar)
End Function
Public Sub opsætningAfHelligDage(påskeDag)
Rem Faste

Rem Nytårsdag/(Grundlovsdag)/(Juleaften)/Juledag/2. Juledag/(Nytårsaften)
    hDageFaste = Array("01-01", "05-06", "24-12", "25-12", "26-12", "31-12")

Rem Grundlovsdag
    If Me.CheckBox1 = True Then
        hDageFaste(1) = ""
    End If
   
Rem Juleaften
    If Me.CheckBox2 = True Then
        hDageFaste(2) = ""
    End If

Rem Nytårsaften
    If Me.CheckBox3 = True Then
        hDageFaste(5) = ""
    End If

Rem Skærtorsdag/Langfredag/Påskedag/2. Påskedag/St. Bededag/Kr. Himmelfart/Pinsedag/2. Pinsedag
    hDageVar = Array("", "", "", "", "", "", "", "")

Rem Skærtorsdag
    hDageVar(0) = Format(DateAdd("d", -3, påskeDag), "dd-mm")
   
Rem Langfredag
    hDageVar(1) = Format(DateAdd("d", -2, påskeDag), "dd-mm")

Rem Påskedag
    hDageVar(2) = Format(påskeDag, "dd-mm")

Rem 2. Påskedag
    hDageVar(3) = Format(DateAdd("d", 1, påskeDag), "dd-mm")

Rem St. Bededag
    hDageVar(4) = Format(DateAdd("ww", 4, hDageVar(1)), "dd-mm")
   
Rem Kr. Himmelfart
    hDageVar(5) = Format(DateAdd("ww", 6, hDageVar(0)), "dd-mm")
   
Rem Pinsedag
    hDageVar(6) = Format(DateAdd("ww", 7, påskeDag), "dd-mm")

Rem 2. Pinsedag
    hDageVar(7) = Format(DateAdd("d", 1, hDageVar(6)), "dd-mm")
End Sub
Public Function erDetHelligdag(testDato)
Dim f, dato As String
    dato = Format(testDato, "dd-mm")

Rem Faste helligdage
    For f = 0 To 5
        If hDageFaste(f) = CStr(dato) Then
            erDetHelligdag = True
            Exit Function
        End If
    Next f

Rem Variable
    For f = 0 To 7
        If hDageVar(f) = dato Then
            erDetHelligdag = True
            Exit Function
        End If
    Next f
   
    erDetHelligdag = False
End Function
Private Sub CommandButton2_Click()                  'Luk
    gemIndstillinger
   
    Unload UserForm1
End Sub
Private Sub UserForm_activate()
    læsIndstillinger
End Sub
Private Sub læsIndstillinger()
    Me.CheckBox1 = sætCheckbox(2, 3)
    Me.CheckBox2 = sætCheckbox(3, 3)
    Me.CheckBox3 = sætCheckbox(4, 3)
End Sub
Private Function sætCheckbox(ræk, kol)
    With ActiveWorkbook.Sheets("Indstillinger")
        If .Cells(ræk, kol) = "x" Then
            sætCheckbox = True
        Else
            sætCheckbox = False
        End If
    End With
End Function
Private Sub gemIndstillinger()
    sætIndstilling 2, 3, Me.CheckBox1.Value
    sætIndstilling 3, 3, Me.CheckBox2.Value
    sætIndstilling 4, 3, Me.CheckBox1.Value
End Sub
Private Sub sætIndstilling(ræk, kol, værdi)
    With ActiveWorkbook.Sheets("Indstillinger")
        If værdi = True Then
            .Cells(ræk, kol) = "x"
        Else
            .Cells(ræk, kol) = ""
        End If
    End With
End Sub
Avatar billede svla Mester
30. august 2009 - 11:59 #12
Hej
Tak for den fremsendte kode vedr. mit sidste spørgsmål, der må have været en fejl i koden (den ene variabel), men jeg kan se hvad det går ud på, og med lidt rettelser virker det næsten perfekt nu, jeg har testet det på et excelark, der er blot lige det at hvis resultatet bliver over 24:00 timer så vises det forkert på mit excelark.
- Men jeg prøver mig lidt frem.
- Selvom det sidste ikke virker helt endnu accepterer jeg dit svar/kode for det er den jeg bruger.
Avatar billede svla Mester
30. august 2009 - 13:18 #13
Hej
Har fået alt til og virke nu, rettede lidt på typen af variabler, m.m.

Tak for hjælpen, så lærte jeg lidt om datoer og tid.
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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