Il blog di Gianni Giaccaglini

Blog su VBA e VSTO
Gianni Giaccaglini

My Links

News

NB - V. anche gli ARTICOLI (in fondo a questa barra)
Solo quesiti validi a: giannigiac@tin.it
Il mio nuovo libro


La mia nipotina ELISA

Foto con dedica a ME di
Bill Gates giovanissimo
nei mitici anni 80!

Categorie Post

Categorie Articoli

Archivio

Immagini

Blog Stats

Lampeggio condizionato con OnTime: mission impossible?

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.

 

?>

posted on venerdì 29 gennaio 2010 12.07