Usare la Funzione Timer

Esempio di Utilizzo : Fare lampeggiare celle per richiamare attenzione.

 

Può necessitare di volere richiamare l'attenzione dell'operatore sul verificarsi di un determinato evento. Oltre al sistema di avvisare tramite un suono (Beep), può essere di maggiore efficacia usare dei colori che si attivino e lampeggino, come se fosse una luce che si accende e si spenge richiedendo attenzione. Questo effetto come un "Lampeggiatore" lo potremo attivare usando la funzione Timer, con la quale è possibile stabilire il tempo di durata assegnando un valore che rappresenta il numero di secondi di "accensione". Come al solito presento un esempio, in cui faccio lampeggiare due Range di celle, alternativamente, di rosso e di giallo. Ho scelto un Range esteso per ottenere un maggior richiamo visivo. Ognuno potrà definire le zone che vorrà. La routine si basa sull'ipotesi che, quando in una determinata cella (ho considerato la E1) compare un certo valore (ho usato "Pippo"), si deve attivare la routine e quindi il lampeggiare. Va da sè che ognuno potrà variare le condizioni di attivazione secondo le proprie necessità. Il ciclo si ripete secondo l'istruzione For x  =  1 To 5, cioè per 5 volte, desiderando cicli diversi, basterà variare il 5 con altro numero. Quando la routine termina il numero di cicli previsti, faccio apparire un messaggio (io ho usato "Attenzione!!!") che blocca l'uscita e lascia le celle con i colori assegnati dall'ultimo ciclo. Solo premendo Ok sulla finestra del messaggio, si sblocca il codice che prosegue l'istruzione, riportando le celle all'origine (senza colore), ed esce dalla routine. Questo è il codice da provare associando la macro ad un pulsante. Per automatizzare invece il lancio della routine, possiamo scegliere un evento del foglio di lavoro, e dal momento che abbiamo scelto di far lampeggiare SE una cella conterrà un determinato valore, conviene scegliere l'evento Change, quindi ad esempio:

  • Private Sub Worksheet_Change(ByVal Target As Range)
    Lampeggia    
    'richiamiamo la macro Lampeggia che avremo posto su un Modulo standard
    End Sub

E' pure evidente che possiamo far lampeggiare celle o aree diverse dalla cella che subisce il cambiamento.

 

Sub Lampeggia()
If Range("E1").Value = "Pippo" Then
Dim PauseTime, Start, Finish
For x = 1 To 5
    'inizia il ciclo e lo ripete per 5 volte
PauseTime = 0.5 
' Imposta la durata in secondi. ho messo 1/2 secondo
Start = Timer  
' Imposta l'ora di inizio: Timer rappresenta il numero di secondi trascorsi dalla mezzanotte
Do While Timer < Start + PauseTime 
'fino a che il valore di Timer è inferiore al valore reperito con Start più il 'tempo in secondi impostato con PauseTime, continua a contare (Loop)
DoEvents
  'si consente di passare il controllo ad altri processi.(altrimenti il ciclo bloccherebbe altri eventi)
Range("A1:D7").Cells.Interior.ColorIndex = 3 
'colora il range di celle di rosso
Range("A12:D21").Cells.Interior.ColorIndex = 6 
'colora il range di celle di giallo
Loop
Finish = Timer
  ' Imposta l'ora di fine della pausa.

PauseTime = 0.5  
' Imposta la durata.
Start = Timer  
' Imposta l'ora di inizio.
Do While Timer < Start + PauseTime
DoEvents   
' Passa il controllo ad altri processi.
Range("A1:D7").Cells.Interior.ColorIndex = 6
Range("A12:D21").Cells.Interior.ColorIndex = 3
Loop
Finish = Timer
' Imposta l'ora di fine della pausa.
Next x


'finisce il ciclo, appare un messaggio
'che blocca i colori

MsgBox "ATTENZIONE!!!!"
'premuto ok sul messaggio, vengono eliminati i colori
Range("A1:D7").Cells.Interior.ColorIndex = xlNone
Range("A12:D21").Cells.Interior.ColorIndex = xlNone
'finisce
End
End If
End Sub