martedì 23 settembre 2014

Nuova routine di calcolo dei turni

Ho creato un'altra variabile pubblica, lastCaption, che memorizza il valore "uscente" dalla cella Bersaglio.
Public Bersaglio As Range
Public lastCaption As String
Public Const Centralina = "Foglio1"
e la testo modificando la routine scrivi:
Sub scrivi(testo As String, etichetta As String)
    lastCaption = Bersaglio.Formula
    Bersaglio.FormulaR1C1 = testo
    MsgBox lastCaption
End Sub
ottenendo una messageBox con il nome "uscente": quindi il procedimento funziona.

Abbiamo quindi un valore uscente e un valore entrante.
Su questi bisognerà fare operazioni opposte: per il valore uscente, trovandolo sulla ListaNomiMese, bisognerà ridurre di 1 il valore dei turni, mentre per il valore entrante bisognerà aumentarlo di 1.
Abbozziamolo: Trovare il valore uscente nella lista nomi. Solito test dei colori...
Sub conta()
    Dim trovato As Range
    Set trovato = Range("ListaNomiMese").Find(lastCaption)
    trovato.Interior.Color = vbCyan
End Sub
che dimostra il corretto funzionamento della cosa.

Una migliore denominazione:
Sub conta()
    Dim vecchioTesto As Range
    Set vecchioTesto = Range("ListaNomiMese").Find(lastCaption)
    vecchioTesto.Interior.Color = vbCyan
End Sub
Bene.

... Ho elaborato tutto! Ecco la routine definitiva (in fase di sperimentazione, speriamo che funzioni)
Sub conta()
    Dim vecchioTesto As Range, nuovoTesto As Range
    If lastCaption <> "" Then
        Set vecchioTesto = Range("ListaNomiMese").Find(lastCaption)
        vecchioTesto.Offset(0, 2).Formula = vecchioTesto.Offset(0, 2).Formula - 1
    End If
    If Bersaglio.Formula <> "" Then
        Set nuovoTesto = Range("ListaNomiMese").Find(Bersaglio.Formula)
        nuovoTesto.Offset(0, 2).Formula = Val(nuovoTesto.Offset(0, 2).Formula) + 1
        Set vecchioTesto = Nothing
        Set nuovoTesto = Nothing
        lastCaption = ""
    End If
End Sub
Molto più rapida!

E ce la analizzeremo per bene...

Nessun commento:

Posta un commento