Stefano wrote:
> Il giorno lunedì 29 maggio 2023 alle 02:03:22 UTC+2 issdr ha scritto:
>> Stefano Piccioli wrote:
>>
>> >> in sostanza, la funzione "sa" in quale foglio si trova, togliendo i
>> >> riferimenti al foglio attivo dal codice dovresti risolvere
mi sbagliavo!
>> > Grazie, ma purtroppo non funziona succede sempre come prima
>> se puoi condividere un file d'esempio può essere d'aiuto
> Ecco il link per scaricare copia il file
ho risolto con un riferimento all'oggetto "genitore" dell'argomento rig
passato alla funzione, ovvero il foglio da cui viene chiamata. tramite
l'istruzione with, ogni chiamata .cell pesca i valori dal foglio dove
sta la funzione.
--8<---------------cut here---------------start------------->8---
Function assenze(ese As String, rig As Range) As Integer
Dim C As Variant
Dim Colon_na, ore_mod1, ore_mod2, ore_mod3 As Integer
Dim Ri_ga, tOt, tot_E As Integer
assenze_ap = 0
ConTa = 0
tOt = 0
C = 0
Application.Volatile
For Each C In rig
Ri_ga = C.Row
Colon_na = C.Column
With rig.Parent 'restituisce il foglio in cui sta l'intervallo "rig"
ore_mod1 = .Cells(31, Colon_na).Value
ore_mod2 = .Cells(32, Colon_na).Value
ore_mod3 = .Cells(33, Colon_na).Value
tOt = ore_mod1 + ore_mod2 + ore_mod3
tot_E = ore_mod2 + ore_mod3
PReS = .Cells(Ri_ga, Colon_na).Value
End With
If PReS = "X" Or PReS = "x" Then
PReS = 0
End If
If ese = "E" Then
If tot_E - PReS > 0 Then
ConTa = ConTa + tot_E - PReS
End If
Else
If tOt - PReS > 0 Then
ConTa = ConTa + tOt - PReS
End If
End If
Next C
assenze = ConTa
End Function
--8<---------------cut here---------------end--------------->8---