Lampeggio condizionato con OnTime: mission impossible?
Questo articolo fa seguito all’articolo Sfolgorio di celle in varie salse su questo blog, di cui al link seguente:
http://blog.shareoffice.it/giannigiaccaglini/articles/10271.aspx
LampeggioOnTipe.xls, il nuovo modello che sto per illustrare, è compresso in un omonimo .ZIP scaricabile da:
http://www.giannigiaccaglini/download/LampeggioOnTime.zip
Il presente articolo COMPLETO si trova su un file Acrobat a sua volta scaricabile da:
http://www.giannigiaccaglini/download/LampeggioCondizionatoConOnTime.pdf
Nel precedente articolo mostravo varie soluzione VBA volte a far lampeggiare celle del foglio di lavoro in vari modi. Il Rag. Vito Borrelli che a suo tempo mi aveva sollecitato, nel frattempo è tornato alla carica con la sua pretesa di creare un formato condizionato lampeggiatoristico (improvvisato quanto squallido neologismo che neanche Renzo Arbore mi perdonerebbe). L’avevo allora escluso, tuttavia stavolta mi segnalava altre (apparenti) soluzioni interessanti di per sé, attinte dal web.
All’ignoto autore tributo anzitutto doverosi encomi, in particolare per avermi fatto tornare in mente macro d’evento On tecnicamente sorpassate ma che a volte sono ancora utili. Ciò vale in particolare per OnTime, metodo dell’oggetto Application, che si scatena ad una certa data e orario (primo argomento) ed avviando la routine indicata (secondo argomento). Esempio pratico subito cotto e mangiato:
Sub Sveglia()
MsgBox "Sono le " & Now()
End Sub
Sub Promemoria()
Application.OnTime Now + TimeValue("00:05:00"), "Sveglia"
End Sub
La seconda delle due precedenti routine richiama in background la prima – che, si badi bene, va indicata fra virgolette. In questo caso la Sveglia fuoriesce dopo 5 minuti dal lancio di Promemoria con un messaggio del tipo “Sono le 29/01/2010 11.59.43” o giù di lì.
Il bello della faccenda sta in due punti: a) funziona con diversi membri MS Office, ergo anche Word come da figura; b) non blocca l’operatività dell’applicativo pertanto l’utente può, nell’attesa, continuare il suo lavoro.
La macro base
Tornando al balenar di celle Excel, l’idea dell’illustre Carneade, cui onestamente non avevo pensato, consiste nell’usare OnTime in modo iterativo con periodicità 1 secondo. Vengo al sodo riportando subito la soluzione che ho adottato:
Dim Fine As Boolean ' Definita a livello modulo (Dichiarazioni)
Sub Lampeggia()
If Fine Then End
'NextTime = Now + TimeValue("00:00:01") 'Possibile variante
Application.OnTime _
Now + TimeValue("00:00:01"), "Lampeggia" ' NextTime, "Lampeggia" ' (variante)
With ActiveCell.Interior
If .ColorIndex = 2 Then
.ColorIndex = 3
Else
.ColorIndex = 2
End If
End With
End Sub
Sub StopLampi()
Fine = True
ActiveCell.Interior.ColorIndex = 2
End Sub
Commenti sintetici. Questa Lampeggia presenta una mia prima variante rispetto all’originale, che partiva da una Sub con una sola istruzione Application.OnTime Now +TimeValue(“00:00:01”), “Lampeggia”.
Nota. L’originale comprendeva il terzo argomento schedule:=True reso poi come schedule:=False nella routine di arresto dei lampeggi.
Infatti ad un tratto mi sono reso conto che tale Sub è pleonastica, e basta lanciare Lampeggia sic et simpliciter, perché ogni successivi secondo rilanci se stessa.
E la seconda variante? Sta nell’adozione da parte mia, in luogo del terzo argomento schedule:=False (v. nota precedente) di una variabile Fine pari a False per default definita a livello modulo ergo visibile in tutte le macro. La mia macro StopLampi fa a mano di OnTime perché fissa Fine=True, in guisa tale che l’iniziale If Fine Then End “uccida l’azione in background di Lampeggia.
Nota SI osservi il più perentorio End rispetto all’usuale Exit Sub.
Tre usi iniziali di OnTime per lampeggio di celle
. . .
IL RESTO DELL’ARTICOLO SI PUÒ SCARICARE DAL PREDETTO LINK:
http://www.giannigiaccaglini/download/LampeggioOnTime.zip
Buona lettura.
?>