Christian sta sviluppando una macro di Excel che visualizza una serie di elementi all’utente. Vorrebbe introdurre nella macro un ritardo di, diciamo, un secondo tra ogni informazione visualizzata, e si chiede se esista un modo semplice per aggiungere tale ritardo.
Esistono alcuni modi per introdurre un ritardo nella macro. Il modo tradizionale consiste nell’utilizzare il metodo Wait, utilizzato con l’oggetto Application. Lo puoi usare per introdurre un ritardo di un secondo in questo modo:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Tieni presente che il parametro richiesto dal metodo Wait è l’ora in cui desideri che la macro riprenda l’esecuzione. In altre parole, significa “aspetta fino a”.. Questo è il motivo per cui l’esempio precedente utilizza l’ora corrente (dalla funzione Now) incrementata di un secondo.
Se preferisci non utilizzare il metodo Wait (per qualsiasi motivo), puoi anche semplicemente utilizzare un ciclo per prendere tempo:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Una variante di questo approccio si basa sulla funzione Timer, che restituisce il numero di secondi trascorsi dalla mezzanotte:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Quando si utilizza un loop in questo modo, probabilmente non sarà un grosso problema se si ritarda solo per un secondo. Se hai bisogno di ritardare per un tempo più lungo, probabilmente vorrai inserire la funzione DoEvents nel ciclo:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Il motivo è semplice: in caso contrario, Excel non risponderà a nessun altro evento durante il ciclo. Ciò può far sembrare che il tuo sistema si sia bloccato durante l’attesa.
Se hai bisogno di maggiore granularità sui ritardi (fino all’intervallo dei millisecondi), potresti fare affidamento sulla funzione Sleep, che fa parte dell’API di Windows (non fa parte di VBA). Per usarla, dovrai includere una dichiarazione all’inizio del modulo, nell’area dichiarazioni, prima di qualsiasi procedura:
Questo contenuto è riservato agli abbonati
Solo gli utenti con Abbonamento VBA Coder oppure Ultimate possono visionarlo.
Se sei già abbonato Accedi per sbloccare il contenuto!
In caso contrario abbonati qui! L'abbonamento è conveniente.
E puoi interromperlo in ogni momento e in completa autonomia.
(puoi renderti conto di quanti siano i contenuti riservati
raggiungendo questa pagina)
Quindi, all’interno della tua macro puoi utilizzare la funzione Sleep in questo modo:
Sleep(1000)
Questo mette in pausa il sistema per 1000 millisecondi, ovvero 1 secondo.