Differenze funzioni Wait() e Sleep() in VBA - Macro Excel con esempi
![Differenze funzioni Wait() e Sleep() in VBA - Macro Excel con esempi](/content/images/size/w1200/2022/10/VBA-1.png)
Le funzionalità Wait e Sleep negli script sono necessarie per mantenere o mettere in pausa l'esecuzione del programma per un periodo di tempo specificato. Questi metodi sospendono tutte le attività di Microsoft Excel e talvolta possono anche impedire di eseguire altre operazioni su di esso fino a quando la pausa è in vigore.
Tuttavia, il computer può elaborare contemporaneamente altre attività in background, come la stampa o l'ordinamento dei thread.
Per l'utilizzo entrare nella modalità "Sviluppo - Visual Basic" di Excel.
Funzione Wait():
Application.Wait(Time)
In 'Time' specificare l'ora in cui si desideri che la macro riprenda, nel formato ora di Excel.
Esempio 1:
'Mettere l'applicazione in pausa per 10 secondi
Sub Esempio1()
MsgBox ("Applicazione avviata!")
Application.Wait (Now + TimeValue("0:00:10"))
MsgBox ("Applicazione ripartita dopo 10 secondi")
End Sub
Esempio 2:
'Sospendere l'esecuzione fino alle ore 14.00 di oggi
Sub Esempio2()
MsgBox ("Applicazione avviata!")
Application.Wait "14:00:00"
MsgBox ("Esecuzione ripartita dopo le 14:00")
End Sub
Esempio 3:
'Utilizzo della funzione Wait per creare un programma che indica vocalmente, tramite la funzione Speech.Speak() l'ora dopo ogni minuto (fino a 15 cicli consecutivi).
Public Sub Esempio3()
For i = 0 To 15
Application.Wait (Now + TimeValue("0:01:00"))
Application.Speech.Speak ("L'ora è" & Time)
Next i
End Sub
Funzione Sleep():
Sleep(tempo)
La variabile 'tempo' deve essere espressa in millisecondi.
Esempio:
'1 sec
Sleep(1000)
'10 sec
Sleep (10000)
Sleep() non è una funzione VBA ma è una funzione presente nelle DLL di Windows e deve essere richiamata tramite il nome dell'API sopra il codice del modulo, in questo formato:
'Excel 2007 o superiori a 64 bit
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
'Versioni precedenti a Excel 2007 e sistemi a 32bit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems
Esempio 1:
'Pausa applicazione 10 secondi
'Excel 2007 o superiori a 64 bit
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
'o
'Versioni precedenti a Excel 2007 e sistemi a 32bit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems
Sub Esempio1()
MsgBox "L'applicazione è partita"
Sleep 10000 'tempo in millisecondi
MsgBox "Esecuzione ripresa"
End Sub
Esempio 2:
'Interruzione del codice per un ritardo definito dall'utente tramite una funzione InputBox.
'Excel 2007 o superiori a 64 bit
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
'o
'Versioni precedenti a Excel 2007 e sistemi a 32bit
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds as Long) 'For 32 Bit Systems
Sub Esempio2()
On Error GoTo InvalidRes
Dim i As Integer
i = InputBox("Inserire il numero di secondi che si vuole mettere in pausa l'applicazione:")
Sleep i * 1000 'tempo in millisecondi
MsgBox ("Applicazione interrotta per " & i & " secondi.")
Exit Sub
InvalidRes:
MsgBox "Inserisci un valore valido"
End Sub
Differenze tra sleep() e wait()
Le funzioni sono più o meno simili. Wait() é più precisa di sleep(), a differenza sleep() é più flessibile in quanto è possibile indicare i tempi in millisecondi, invece con wait() solo di interi secondi.