Ritardare in una macro (Microsoft Excel)
Chris sta sviluppando una macro di Excel che mostra all’utente una serie di elementi. Vorrebbe introdurre un ritardo nella macro di, diciamo, un secondo tra ogni informazione che visualizza e si chiede se esiste un modo semplice per aggiungere tale ritardo.
Ci sono alcuni modi per introdurre un ritardo nella tua macro. Il modo tradizionale consiste nell’usare il metodo Wait, che viene utilizzato con l’oggetto Application. Lo usi per introdurre un ritardo di un secondo in questo modo:
Application.Wait (Now() + TimeValue("0:00:01"))
Si noti che il parametro richiesto dal metodo Wait è l’ora in cui si desidera che la macro riprenda l’esecuzione. In altre parole, è il momento di “aspettare fino a”. Questo è il motivo per cui l’esempio precedente utilizza l’ora corrente (dalla funzione Now) incrementata di un singolo secondo.
Se preferisci non usare il metodo Wait (per qualsiasi motivo), puoi anche usare semplicemente un ciclo per aspettare il tuo tempo:
Dim WaitTime As Date WaitTime = Now() + TimeValue("0:00:01") Do While Now < WaitTime Loop
Una variante di questo approccio si basa sulla funzione Timer, che restituisce il numero di secondi trascorsi dalla mezzanotte:
Dim Endpoint as Single Endpoint = Timer + 1 Do While Timer < Endpoint Loop
Quando si utilizza un ciclo in questo modo, probabilmente non sarà un grosso problema se si ritarda solo di un secondo. Se hai bisogno di ritardare più a lungo, probabilmente vorrai inserire la funzione DoEvents nel ciclo:
Dim Endpoint as Single Endpoint = Timer + 1 Do While Timer < Endpoint DoEvents Loop
Il motivo è semplice: se non lo fai, Excel non risponderà a nessun altro evento durante il ciclo. Questo può far sembrare che il tuo sistema si sia bloccato o bloccato durante l’attesa.
Se hai bisogno di maggiore granularità sui tuoi ritardi (fino all’intervallo di millisecondi), potresti fare affidamento sulla funzione Sleep, che fa parte dell’API di Windows. (Non fa parte di VBA.) Per usarlo, dovrai includere una dichiarazione all’inizio del tuo modulo, nell’area delle dichiarazioni, prima di qualsiasi procedura:
#If VBA7 And Win64 Then Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long) #Else Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long) #End If
Quindi, all’interno della tua macro puoi usare la funzione Sleep in questo modo:
Sleep(1000)
Questo mette in pausa il sistema per 1000 millisecondi, ovvero 1 secondo.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (5134) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.