
Function CalcolaMinuti(Inizio As Date, fine As Date) As Long
Dim dateStart As Date, dateStop As Date, minutiTot As Long, actDate As Date
Dim Giorno_Inizio As Date
Dim Giorno_Inizio_Cor As Date
Dim Giorno_Fine As Date
Dim Giorno_Fine_Cor As Date
minutiTot = 0
dateStop = Format(fine, "dd/mm/yyyy")
actDate = Format(Inizio, "dd/mm/yyyy")
Do Until actDate > dateStop
'ad ogni iterazione verifica se festivo
If Weekday(actDate, vbMonday) > 6 Or Festivo(actDate) Then
Else
'imposto variabili giorno corrente
Giorno_Inizio_Cor = CDate(Format(actDate, "dd/mm/yyyy") & " 07.00.00")
Giorno_Fine_Cor = CDate(Format(actDate, "dd/mm/yyyy") & " 20.00.00")
'determino giorno inizio
If Giorno_Inizio_Cor >= Inizio And Giorno_Inizio_Cor <= fine Then
Giorno_Inizio = Giorno_Inizio_Cor
ElseIf Giorno_Inizio_Cor < Inizio Then
Giorno_Inizio = Inizio
ElseIf Giorno_Inizio_Cor > fine Then
'salta passaggio
GoTo successivo
End If
'determino giorno Fine
If Giorno_Fine_Cor >= Inizio And Giorno_Fine_Cor <= fine Then
Giorno_Fine = Giorno_Fine_Cor
ElseIf Giorno_Fine_Cor >= fine Then
Giorno_Fine = fine
ElseIf Giorno_Fine_Cor <= Inizio Then
'salta passaggio
GoTo successivo
End If
'eseguo il calcolo
minutiTot = minutiTot + DateDiff("n", Giorno_Inizio, Giorno_Fine)
End If
'giorno successivo
successivo:
actDate = DateAdd("d", 1, actDate)
Loop
'risultato
CalcolaMinuti = minutiTot
End Function
|
Option Explicit
Function CalcolaMinuti(Inizio As Date, fine As Date) As Long
Dim dateStart As Date, dateStop As Date, minutiTot As Long, actDate As Date
Dim Giorno_Inizio As Date
Dim Giorno_Inizio_Cor As Date
Dim Giorno_Fine As Date
Dim Giorno_Fine_Cor As Date
minutiTot = 0
dateStop = Format(fine, "dd/mm/yyyy")
actDate = Format(Inizio, "dd/mm/yyyy")
Do Until actDate > dateStop
'ad ogni iterazione verifica se festivo
If Weekday(actDate, vbMonday) <= 6 And Not Festivo(actDate) Then
'imposto variabili giorno corrente
Giorno_Inizio_Cor = CDate(Format(actDate, "dd/mm/yyyy") & " 07.00.00")
If Weekday(actDate, vbMonday) <> 6 Then
Giorno_Fine_Cor = CDate(Format(actDate, "dd/mm/yyyy") & " 20.00.00")
Else
Giorno_Fine_Cor = CDate(Format(actDate, "dd/mm/yyyy") & " 13.00.00")
End If
'determino giorno inizio
If Giorno_Inizio_Cor >= Inizio And Giorno_Inizio_Cor <= fine Then
Giorno_Inizio = Giorno_Inizio_Cor
ElseIf Giorno_Inizio_Cor < Inizio Then
Giorno_Inizio = Inizio
ElseIf Giorno_Inizio_Cor > fine Then
'salta passaggio
GoTo successivo
End If
'determino giorno Fine
If Giorno_Fine_Cor >= Inizio And Giorno_Fine_Cor <= fine Then
Giorno_Fine = Giorno_Fine_Cor
ElseIf Giorno_Fine_Cor >= fine Then
Giorno_Fine = fine
ElseIf Giorno_Fine_Cor <= Inizio Then
'salta passaggio
GoTo successivo
End If
'eseguo il calcolo
minutiTot = minutiTot + DateDiff("n", Giorno_Inizio, Giorno_Fine)
End If
'giorno successivo
successivo:
actDate = DateAdd("d", 1, actDate)
Loop
'risultato
CalcolaMinuti = minutiTot
End Function |
Function CalcolaMinuti_vfrac(inizio As Date, fine As Date) As Long
Dim d As Long, diff As Long, giorni_feriali As Long, ore_giorni_feriali As Long, ore_sabato As Long
Dim QUOTE As String
QUOTE = Chr(34)
'escludo il giorno finale del periodo
fine = DateAdd("d", -1, fine)
'calcolo i giorni feriali nel periodo
giorni_feriali = Evaluate("GIORNI.LAVORATIVI.TOT(" & QUOTE & inizio & QUOTE & "," & QUOTE & fine & QUOTE & ")")
'e le ore corrispondenti
ore_giorni_feriali = giorni_feriali * 13
'calcolo quanti sabati ci sono nel periodo e le ore corrispondenti
ore_sabato = quanti_sabato(inizio, fine) * 6
'eseguo il calcolo
CalcolaMinuti_vfrac = (ore_giorni_feriali + ore_sabato) * 60
End Function
Private Function quanti_sabato(inizio As Date, fine As Date)
Dim c_date As Date, i As Long
For c_date = inizio To fine
If Weekday(c_date, vbMonday) = vbSaturday Then i = i + 1
Next
quanti_sabato = i
End Function
|
CalcolaMinuti_vfrac = (ore_giorni_feriali + ore_sabato) * 60
