Inserire finestra con un valore di timeout - Macro VBA Excel con esempi

Inserire finestra con un valore di timeout - Macro VBA Excel con esempi
🖥️
Testato su: Excel 2010 e Excel 2016

Ultimamente mi sono ritrovato a creare una funzione che eseguisse diverse macro in Excel e la necessità che tra una macro VBA e l'altra uscisse una finestra che si chiudesse automaticamente dopo tot sec. con un messaggio di completamento.

Ho scoperto che la chiusura automatica, a causa di un bug presente da più di 10 anni relativo alla "WshShell" non è stato mai risolto e l'unica, ma funzionale, soluzione trovata è stata quella di richiamare mshta.exe, entrando nell'editor di sviluppo Visual Basic di Excel, come di seguito:

CreateObject("WScript.Shell").Run "mshta.exe vbscript:close(CreateObject(""WScript.Shell"").Popup(""Prova"",3,""Messaggio in tempo reale""))"

Nel caso ci fosse bisogno di sospendere lo script per qualche secondo si può utilizzare la funzione "Application.Wait", più precisa della tanto usata "Sleep":

'Pausa per 10 sec.
Application.Wait (Now + TimeValue("0:00:10"))

Es. programma di test che sospende l'applicazione per 5 sec e ferma la finestra per 5 sec.:

Sub test()
CreateObject("WScript.Shell").Run "mshta.exe vbscript:close(CreateObject(""WScript.Shell"").Popup(""Prova"",5,""Messaggio in tempo reale""))"
Application.Wait (Now + TimeValue("0:00:5"))
End Sub