Hvad jeg husker er det integer som datadiff returnerer, ergo ingen kommatal fra den funktion.
Prøv med:
varighedsres = DateDiff(interval:="d", Date1:=startDato, Date2:=slutdato)/365*12
Nåh ja, så vil det jo være lettere blot at skrive:
varighedsres = (slutdato-startdato)/365*12
Her er den løsning som jeg selv er kommet frem til:
Private Sub Varighed_Enter()
Dim startDato As String
Dim slutdato As String
Dim TestDato As String
Dim varighedsres As Integer
Dim dag1 As Integer
Dim dag2 As Integer
Dim PartofMonth As Integer
Dim month As Integer
Dim month2 As Integer
Dim antaldage As Integer
Dim Skudår As Boolean
Dim måned
startDato = Forms!Opret_ophold!Fra_dato
slutdato = Forms!Opret_ophold!Til_dato
month = Val(Mid(startDato, 4, 2))
month2 = Val(Mid(slutdato, 4, 2))
måned = month 'Angivelse af måneden til første gennemkørelse af hver case
Select Case måned
Case 1, 3, 5, 7, 8, 10, 12 'Case hvor antalet af dage i en måned sættes til 31
antaldage = 31
dag1 = Val(Mid(startDato, 1, 2))
Case 4, 6, 9, 11 'Case hvor antalet af dage i en måned sættes til 30
antaldage = 30
dag1 = Val(Mid(startDato, 1, 2))
Case 2 'Case hvor der tages højde for skud år
TestDato1 = "29-02-" & Val(Mid(startDato, 7, 4))
If IsDate(TestDato1) Then
Skudår = True
antaldage = 29
dag1 = Val(Mid(startDato, 1, 2))
Else
Skudår = False
antaldage = 28
dag1 = Val(Mid(startDato, 1, 2))
End If
End Select
måned = month2 'Angivelse af månden til anden gennemkørelse af hver case for datoen slutdato
Select Case måned
Case 1, 3, 5, 7, 8, 10, 12 'Case hvor antalet af dage i en måned sættes til 31
antaldage = 31
dag2 = Val(Mid(slutdato, 1, 2))
Case 4, 6, 9, 11 'Case hvor antalet af dage i en måned sættes til 30
antaldage = 30
dag2 = Val(Mid(slutdato, 1, 2))
Case 2 'Case hvor der tages højde for skud år
TestDato1 = "29-02-" & Val(Mid(slutdato, 7, 4))
If IsDate(TestDato1) Then
Skudår = True
antaldage = 29
dag2 = Val(Mid(slutdato, 1, 2))
Else
Skudår = False
antaldage = 28
dag2 = Val(Mid(slutdato, 1, 2))
End If
End Select
varighedsres = DateDiff(interval:="m", Date1:=CDate(startDato), Date2:=CDate(slutdato)) 'Udregning af antallet af måneder fra startdato til slutdatoen
Forms!Opret_ophold!Varighed = varighedsres + (dag1 / antaldage) + (dag2 / antaldage) 'Angivelse af den samlede tid mellem de to måneder.
End Sub
Hvad syntes i om det jeg har fundet frem til?
Hvorfor gøre det nemt, hvis man kan gøre det svært ;0)
Så vidt jeg lige kan se, så regner den ikke helt korrekt. Resultatet bliver 1,07 hvis forskellen er præcist én måned.
Nu ved jeg jo ikke, hvad det er du skal bruge det til, men giver det overhovedet nogen mening at skelne mellem om det måneder med 28, 29, 30 eller 31 dage?
For det første er forskellen i virkeligheden ikke ret stor, når man betragter resultatet som måneder med en decimal.
For det andet er det vel ikke rimeligt at sige at f.eks. to personer har brugt lige lang tid på et stykke arbejde, hvis den ene har brugt en måned i februar og den anden en måned i marts. Så vidt jeg lige kan se, så skal det i begge tilfælde give 1,0 måned med din funktion. Men i virkeligheden har den ene brugt 10 procent mere tid på det.