Esiste un equivalente a Thread.Sleep () in VBA

Esiste un equivalente a Thread.Sleep() in Access VBA?

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" _ (ByVal dwMilliseconds As Long) 

Utilizzare la seguente syntax per chiamare la funzione Sleep:

 Sub Sleep() Sleep 1000 'Implements a 1 second delay End Sub 

Un altro modo senza usare kernel32:

 Dim started As Single: started = Timer Do: DoEvents: Loop Until Timer - started >= 1 

Sono necessari un paio di modifiche per far funzionare il codice. Il seguente codice è la versione corretta.

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) Sub SleepVBA() Sleep 1000 'Implements a 1 second delay End Sub 

Tutto il resto dei metodi per fare in modo che Excel attenda il risultato in Excel diventando completamente non rispondente. La soluzione per fare in modo che Excel aspetti mentre si assicura un’interfaccia utente retriggers è di chiamare questo sub di attesa con il numero di secondi di attesa.

  Sub Wait(seconds As Integer) Dim now As Long now = Timer() Do DoEvents Loop While (Timer < now + seconds) End Sub 

Lo uso in Excel e funziona alla grande:

 Application.Wait DateAdd("s", 1, Now()) 

DateAdd () è una funzione che imposta un tempo, relativo a Now() (in questo caso, è ansible utilizzare altri valori come argomento), "s" è la misura del tempo (secondi in questo caso) e l’incremento è 1 Quindi qui, la chiamata di funzione sta dicendo all’applicazione di attendere 1 secondo.

Vedi anche per maggiori dettagli sull’uso della funzione DateAdd .

È ansible utilizzare la procedura Excel Wait () da Access VBA.

Il primo passo è assicurarsi che la libreria di Excel sia referenziata dal tuo progetto.

Quando ciò è fatto, il seguente codice funzionerà per attendere dieci secondi:

 Call Excel.Application.Wait(Time:=DateAdd("s",10,Now())) 

Se si utilizza Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) , si potrebbe ottenere questo errore in un modulo object.

inserisci la descrizione dell'immagine qui

Se è così, puoi dichiararlo come privato:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Aggiunta

 Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long) 

in qualche modo ha creato problemi aggiuntivi da qualche altra parte nel mio codice. Ho finito per usare questa funzione che ho trovato su un altro forum e ho twittato un po ‘:

 Function WaitTime(n As Double) 'Function that wait an amount of time n in seconds TWait = Time TWait = DateAdd("s", n, TWait) Do Until TNow >= TWait TNow = Time Loop End Function 

spero che questo ti aiuti 🙂