Ciao xing,
puoi usare il metodo OnTime per rischedulare il riavvio di una macro ogni tot tempo. Esempio:
- Codice: Seleziona tutto
Sub Restarta()
CellaFlag = "M1" '<<<-- Cambiare se necessario
DeltaT = "00:00:05" '<<< restart ogni 5 Secondi; cambiare se necessario
'
Calculate
If Range(CellaFlag).Value = 0 Then
Range(CellaFlag).Interior.ColorIndex = xlNone
Exit Sub
End If
Application.OnTime Now + TimeValue(DeltaT), "Restarta"
Range(CellaFlag).Interior.ColorIndex = 3 '<<< 3=ROSSO; 4=Verde; 6=Giallo;7=Fucsia; 8=Celeste
'Range("N1").Value = Range("N1").Value + 1
End Sub
Questa macro ricalcola il workbook e si riavvia dopo 5 secondi, e cosi’ via fintanto che in una cella (ho usato M1, ovviamente puoi usare quella che ti fa piu’ comodo) c’ e’ un valore diverso da 0.
Quindi:
-copia la macro su un foglio Modulo di codice (Alt-F11 per aprire il vba editor; se nel frame “Progetto” a sx c’ e’ una cartelletta “moduli” sotto l’ elenco dei fogli del tuo file, fai doppioclick per aprire Modulo1; se non c’ e’, fai Inserisci ->Modulo; nel frame di sx di Modulo1 incolla il codice di cui sopra)
-modifica se necessario le variabili CellaFlag (indirizzo della cella usata per enable/disable) e DeltaT (tempo di re-start)
-assegna alla macro un tasto di scelta rapida (da Excel: Strumenti ->Macro ->Macro; selezioni la macro Restarta dall’ elenco; pigi “Opzioni”, e nell’ area “Tasto di scelta rapida” inserisci R (maiuscolo); chiudi con Ok e con x.
Uso:
Inserisci il flag 1 nella cella M1 (o in quella che tu hai deciso di usare modificando la variabile CellaFlag; premi Contr-Maiusc-R.
La macro viene avviata e si rischedula ogni tot secondi (come variabile DeltaT) fintanto che M1 non viene settato a 0. Mentre la rischedulazione e’ attiva, la cella M1 e’ colorata in Rosso (se vuoi un altro colore, cambia l’ indice come nei commenti), quando e’ disattiva (cella M1 = 0) il colore viene rimosso.
Nota che potresti anche attivare una doppia, tripla, etc schedulazione, rilanciando la macro Restarta (Contr-Maiusc-R) mentre c’ e’ gia’ una schedulazione attiva; questo potrebbe raddoppiare, triplicare, etc la frequenza di esecuzione; ma potrebbe anche portare a incasinare excel in caso di esecuzioni troppo ravvicinate. Suggerisco quindi di schedulare la macro 1 sola volta e di evitare un restart fintanto che M1 e’ colorata; se vuoi una indicazione visiva della frequenza di restart, togli l’ apice in testa all’ istruzione Range("N1").Value etc etc: ad ogni ciclo N1 verra' incrementato di 1 (ovviamente N1 deve essere una cella disponibile, altrimenti cambia l’ indirizzo).
Nota che potresti usare anche solo:
- Codice: Seleziona tutto
Sub Restarta()
Calculate
Application.OnTime Now + TimeValue("00:00:05"), "Restarta"
End Sub
Ma credo che le istruzioni aggiuntive abbiano la loro utilita’.
Una ultima domanda, che potrebbe rendere superfluo tutto cio’ che ho detto sopra: ma perche’ vuoi aggiornare ogni tot secondi? Hai disabilitato volontariamente il ricalcolo Automatico? Quale e’ la natura e l’ origine dei tuoi dati? Perche’ non si possono aggiornare “quando serve”, cioe’ solo dopo che e’ cambiato qualche cosa?
Ciao,