Differenze funzioni Wait() e Sleep() in VBA - Macro Excel con esempi

Differenze funzioni Wait() e Sleep() in VBA - Macro Excel con esempi
🖥️
Testato su: Excel 2010 e Excel 2016

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.