Aggiornamento automatico formule



  • Aggiornament automatic formule
    di Alessandro (utente non iscritto) data: 14/03/2009

    Ciao a tutti vi espongo il problema...sto realizzando un calendario turni per il lavoro, per fare questo uso una chiamata a una routine vba calcola_turno(data) per ogni giorno dell'anno. la routine calcola_turno(data) restitisce il turno in base alla data immessa come input e in base alla squadra (siamo 4 squadre a,b,c,d) contenuta in una cella...sembra funzionare tutto ma se cambio la sottosquadra nella cella non si aggiornano in automatico tutti i turni del calendario...riesco a forzare l'aggiornamento con la combinazione ctrl+alt+f9 oppure andando a dare l'invio per ogni formula...in opzioni il calcolo è impostato su automatico e uso excel 2003...bugs o sbaglio qualcosa??? vi incollo per intero tutto il codice...
     
    Global turni(28) As String
    Global riferimento As Date
    
    
    Function calcola_turno(ByVal giorno As Date) As String
    Dim giorni, resto As Integer
    Dim squadra As String
    squadra = Foglio1.Cells(1, 21) 
    Select Case squadra
    Case Is = "A"
        definisci_turni_a
    Case Is = "B"
        definisci_turni_b
    Case Is = "C"
        definisci_turni_c
    Case Is = "D"
        definisci_turni_d
    End Select
    If giorno >= riferimento Then
        giorni = giorno - riferimento
        resto = giorni Mod 28
    Else
        giorni = riferimento - giorno
        resto = 28 - (giorni Mod 28)
        If resto = 28 Then resto = 0
    End If
    calcola_turno = turni(resto)
    End Function
    
    
    Sub definisci_turni_a()
    turni(0) = "2"
    turni(1) = "R"
    turni(2) = "1"
    turni(3) = "1"
    turni(4) = "2"
    turni(5) = "2"
    turni(6) = "N"
    turni(7) = "R"
    turni(8) = "2"
    turni(9) = "2"
    turni(10) = "2"
    turni(11) = "N"
    turni(12) = "N"
    turni(13) = "R"
    turni(14) = "R"
    turni(15) = "1"
    turni(16) = "N"
    turni(17) = "N"
    turni(18) = "R"
    turni(19) = "R"
    turni(20) = "1"
    turni(21) = "1"
    turni(22) = "N"
    turni(23) = "R"
    turni(24) = "R"
    turni(25) = "1"
    turni(26) = "1"
    turni(27) = "2"
    riferimento = #1/1/2006#
    End Sub
    
    
    Sub definisci_turni_b()
    turni(0) = "R"
    turni(1) = "2"
    turni(2) = "2"
    turni(3) = "2"
    turni(4) = "N"
    turni(5) = "N"
    turni(6) = "R"
    turni(7) = "R"
    turni(8) = "1"
    turni(9) = "N"
    turni(10) = "N"
    turni(11) = "R"
    turni(12) = "R"
    turni(13) = "1"
    turni(14) = "1"
    turni(15) = "N"
    turni(16) = "R"
    turni(17) = "R"
    turni(18) = "1"
    turni(19) = "1"
    turni(20) = "2"
    turni(21) = "2"
    turni(22) = "R"
    turni(23) = "1"
    turni(24) = "1"
    turni(25) = "2"
    turni(26) = "2"
    turni(27) = "N"
    riferimento = #1/1/2006#
    End Sub
    
    
    Sub definisci_turni_c()
    turni(0) = "R"
    turni(1) = "1"
    turni(2) = "N"
    turni(3) = "N"
    turni(4) = "R"
    turni(5) = "R"
    turni(6) = "1"
    turni(7) = "1"
    turni(8) = "N"
    turni(9) = "R"
    turni(10) = "R"
    turni(11) = "1"
    turni(12) = "1"
    turni(13) = "2"
    turni(14) = "2"
    turni(15) = "R"
    turni(16) = "1"
    turni(17) = "1"
    turni(18) = "2"
    turni(19) = "2"
    turni(20) = "N"
    turni(21) = "R"
    turni(22) = "2"
    turni(23) = "2"
    turni(24) = "2"
    turni(25) = "N"
    turni(26) = "N"
    turni(27) = "R"
    riferimento = #1/1/2006#
    End Sub
    
    
    Sub definisci_turni_d()
    turni(0) = "1"
    turni(1) = "N"
    turni(2) = "R"
    turni(3) = "R"
    turni(4) = "1"
    turni(5) = "1"
    turni(6) = "2"
    turni(7) = "2"
    turni(8) = "R"
    turni(9) = "1"
    turni(10) = "1"
    turni(11) = "2"
    turni(12) = "2"
    turni(13) = "N"
    turni(14) = "R"
    turni(15) = "2"
    turni(16) = "2"
    turni(17) = "2"
    turni(18) = "N"
    turni(19) = "N"
    turni(20) = "R"
    turni(21) = "R"
    turni(22) = "1"
    turni(23) = "N"
    turni(24) = "N"
    turni(25) = "R"
    turni(26) = "R"
    turni(27) = "1"
    riferimento = #1/1/2006#
    End Sub
    



  • di R (utente non iscritto) data: 14/03/2009

    Se vuoi utilizzarla come udf (funzione definita dall'utente) e vuoi che si aggiorni al variare della cella devi oltre alla data, passare anche la cella con la squadra come argomento della function.
    fai sapere
    saluti
    r




  • Risolto!
    di Alessandro (utente non iscritto) data: 14/03/2009

    Ti ringrazio avevi ragione...passando la cella come parametro nella funzione si aggiorna tutto senza problemi...grazie ancora


  • Aggiornament automatic formule
    di Ale210480 data: 17/03/2009

    Ciao a tutti...un altra domanda...esistono altri modi per passare parametri ad una udf senza includerli nella sua dichiarazione?
    mi spiego meglio...

    avendo un udf tipo:

    function turni(par1,par2,par3...par10 as everything)as everything

    quando i parametri diventano troppi (nel mio caso dovrei passare il contenuto di circa 20 celle!) diventa di difficile lettura...

    d'altra parte se la lettura dei parametri dalle celle excel la faccio da dentro la routine non mi funziona piu (giustamente) l'aggiornamento automatico delle formule...(come da mio precedente post)

    esistono metodi per il passaggio paramentri che siano eleganti nella scrittura e funzionali??? grazie