' Il nome del corrente modulo VBA (Visual Basic for Application) ' deve iniziare con i caratteri "Modulo" ed avere estensione ".bas". ' Per importarlo dentro un Excel 2007 ".xlsm" (con macro attivate), esegui ' Sviluppo, Visual Basic, File, Importa file... ' e, infine, scegli il file corrente dalla finestra di importazione. ' Attribute VB_Name = "Modulo_ITV" Function ITV(Tipo As String, _ Inizio1 As Variant, _ Fine1 As Variant, _ Inizio2 As Variant, _ Fine2 As Variant, _ OreDovute As Variant _ ) As Variant ' Definisce la funzione ITV. ' Riceve. ' 1) Tipo Tipo di calcolo richiesto. ' SUM=Durata totale degli intervalli. ' PAU=Durata della pausa. ' END=Orario di fine dovuto. ' POS=Delta positivo. ' NEG=Delta negativo. ' 2) Inizio1 Orario di inizio del primo intervallo. ' 3) Fine1 Orario di fine del primo intervallo. ' 4) Inizio2 Orario di inizio del secondo intervallo. ' 5) Fine2 Orario di fine del secondo intervallo. ' 6) OreDovute Ore dovute. ' Restituisce. ' 6) ITV Dipende dal parametro Tipo. ' SUM=Durata totale degli intervalli. ' PAU=Durata della pausa. ' END=Orario di fine dovuto. ' POS=Delta positivo. Tempo lavorato in pił. ' NEG=Delta negativo. Tempo lavorato in meno. ' Se i parametri sono male impostati, restituisce come errore il valore -1. 'Rialza il tipo di calcolo richiesto. Tipo = UCase(Tipo) Tolleranza = 0.00001 ITV = -1 If Tipo = "SUM" Then ITV = ITVSUM(Inizio1, Fine1, Inizio2, Fine2) ElseIf Tipo = "PAU" Then ITV = ITVPAU(Fine1, Inizio2) ElseIf Tipo = "END" Then Pausa = ITVPAU(Fine1, Inizio2) Partenza = 0 If Inizio1 <> 0 Then Partenza = Inizio1 Else Partenza = Inizio2 End If ITV = Partenza + Pausa + OreDovute ElseIf Tipo = "POS" Then Somma = ITVSUM(Inizio1, Fine1, Inizio2, Fine2) Delta = Somma - OreDovute If (Delta > Tolleranza) Then ITV = Delta Else ITV = 0 End If ElseIf Tipo = "NEG" Then Somma = ITVSUM(Inizio1, Fine1, Inizio2, Fine2) Delta = OreDovute - Somma If (Delta > Tolleranza) Then ITV = Delta Else ITV = 0 End If Else ITV = -1 End If If ITV < 0 Then ITV = -1 End If End Function Function ITVSUM(Inizio1 As Variant, _ Fine1 As Variant, _ Inizio2 As Variant, _ Fine2 As Variant _ ) As Variant ' Definisce la funzione ITVSUM. ' Riceve. ' Inizio1 Orario di inizio del primo intervallo. ' Fine1 Orario di fine del primo intervallo. ' Inizio2 Orario di inizio del secondo intervallo. ' Fine2 Orario di fine del secondo intervallo. ' Restituisce. ' ITVSUM Durata totale degli intervalli. ' Se i parametri sono male impostati, restituisce come errore il valore -1. ITVSUM = -1 If (Inizio1 = 0 And Fine1 = 0 And Inizio2 = 0 And Fine2 = 0) Then ITVSUM = 0 ElseIf (Inizio1 <> 0 And Fine1 <> 0 And (Inizio1 > Fine1)) Then ITVSUM = -1 ElseIf (Inizio2 <> 0 And Fine2 <> 0 And (Inizio2 > Fine2)) Then ITVSUM = -1 ElseIf (Fine1 <> 0 And Inizio2 <> 0 And (Fine1 > Inizio2)) Then ITVSUM = -1 ElseIf (Inizio1 <> 0 And Fine1 = 0 And Inizio2 = 0 And Fine2 <> 0) Then ITVSUM = Fine2 - Inizio1 ElseIf (Inizio1 <> 0 And Fine1 = 0 And Inizio2 = 0 And Fine2 = 0) Then ITVSUM = 0 ElseIf (Inizio1 = 0 And Fine1 = 0 And Inizio2 <> 0 And Fine2 = 0) Then ITVSUM = 0 ElseIf (Inizio1 <> 0 And Fine1 <> 0 And Inizio2 = 0 And Fine2 = 0) Then ITVSUM = Fine1 - Inizio1 ElseIf (Inizio1 <> 0 And Fine1 <> 0 And Inizio2 <> 0 And Fine2 = 0) Then ITVSUM = Fine1 - Inizio1 ElseIf (Inizio1 <> 0 And Fine1 <> 0 And Inizio2 <> 0 And Fine2 <> 0) Then ITVSUM = Fine1 - Inizio1 + Fine2 - Inizio2 ElseIf (Inizio1 = 0 And Fine1 = 0 And Inizio2 <> 0 And Fine2 <> 0) Then ITVSUM = Fine2 - Inizio2 End If If ITVSUM < 0 Then ITVSUM = -1 End If End Function Function ITVPAU(InizioPausa As Variant, _ FinePausa As Variant _ ) As Variant ' Definisce la funzione ITVPAU. ' Riceve. ' InizioPausa Orario di inizio della pausa. ' FinePausa Orario di fine della pausa. ' Restituisce. ' ITVPAU Durata della pausa. ' Se gli orari sono male impostati, restituisce come errore il valore -1. If (InizioPausa = 0 Or FinePausa = 0) Then ITVPAU = 0 ElseIf (InizioPausa > FinePausa) Then ITVPAU = -1 Else ITVPAU = FinePausa - InizioPausa End If If ITVPAU < 0 Then ITVPAU = -1 End If End Function