Funció Sleep VBA d'Excel per posar en pausa el vostre codi macro

Funció de son Excel VBA

VBA Sleep La funció és una funció de Windows present als fitxers DLL de Windows que s’utilitza per aturar o aturar el procediment de macro durant un període de temps especificat després d’aquesta quantitat de que podem reprendre el programa.

Hi ha situacions en què hem d’aturar el procés d’execució de macros per completar altres conjunts de tasques. Altres conjunts de tasques podrien formar part de la nostra codificació o formar part d’un altre procediment de macros o bé es podrien introduir per a la macro excel actual. Com es pot aturar el programa quan s’executa? Podem posar en pausa el codi de procediment durant un temps especificat per l’usuari i, després d’aquesta quantitat, podem reprendre el programa. Ho podem fer a VBA mitjançant la funció SLEEP.

Què fa la funció VBA Sleep?

SLEEP, ja que el seu propi nom diu "dormir durant un temps", "descansar durant un temps", "pausa per temps", descansar per un temps ", etc. Utilitzant això podem retardar el procés del codi macro.

Si creieu que tenim una funció integrada anomenada SLEEP, esteu equivocats perquè a VBA no hi ha aquesta funció, més aviat tenim una funció anomenada Sleep com a funció de Windows. En introduir un conjunt especial de codi, podem anomenar aquesta funció a VBA. De fet, és una funció present als fitxers DLL del Windows, de manera que hem de declarar la nomenclatura de l'API abans de l'inici de la subrutina a vba.

A continuació es mostra el codi VBA.

Codi:

# If VBA7 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Per a versions de 64 bits d'Excel # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Per a versions de 32 bits de Excel # Fi Si 

Copieu l'anterior i enganxeu-lo al mòdul abans de començar a escriure els codis macro. S'ha d'enganxar així al vostre mòdul.

Exemple

Abans de mostrar-vos la forma d’escriure el codi, deixeu-me que us expliqui poc més sobre la funció de son. Retarda el procés en mil·lisegons. Per tant, 1 segon és igual a 1.000 mil·lisegons, si voleu fer una pausa durant 10 segons hauria de ser 10000 mil·lisegons.

Podeu descarregar aquesta plantilla VBA Sleep Excel aquí: plantilla VBA Sleep Excel

Exemple 1

Un cop enganxat el codi API abans de l'inici del procediment Sub, creeu un nom de macro.

Codi:

# Sub Sleep_Example1 () Final Sub 

Declareu dues variables com una cadena.

Codi:

 Dim StartTime As String Dim EndTime As String 

Per a L'hora d'inici variable assigna el valor de la funció TIME. Nota: TIME en la funció excel retorna l’hora actual.

Codi:

StartTime = Hora

Ara mostrarem aquest missatge al quadre de missatges VBA.

Codi:

StartTime = Hora MsgBox StartTime

Ara posarem en pausa el codi durant 10 segons mitjançant la funció de repòs. Com he dit, posa en pausa el codi en mil·lisegons, de manera que per fer una pausa durant 10 segons hem d'utilitzar 10000 mil·lisegons.

Codi:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Temps MsgBox StartTime Sleep (10000) End Sub 

Ara utilitzeu la segona variable EndTime i assigneu l’hora actual.

Codi:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Hora MsgBox StartTime Sleep (10000) EndTime = Hora MsgBox EndTime End Sub 

Ara hi ha dues variables L'hora d'inici i Temps esgotat mantindrà l'hora d'inici i finalització de la macro. Executeu aquesta macro; al principi veurem l’hora d’inici de la macro, és a dir, l’hora actual al vostre sistema.

Feu clic a D'acord, dormirà durant 10 segons. Podeu veure el símbol de memòria intermèdia.

Després de 10 segons, començarà a reprendre el codi, de manera que mostrarà l'hora de finalització, és a dir, després d'esperar 10 segons quin és l'hora actual.

Ara podeu veure que la macro va començar a les 10:54:14 i va acabar a les 10:54:24, és a dir, que hi ha exactament la diferència de 10 segons. En aquests 10 segons, VBA posa en pausa el codi en execució.

Exemple 2: funció de son en bucles

El son s’utilitza millor amb bucles a VBA. Per exemple, vull inserir números de sèrie de l'1 al 10 mitjançant el bucle Do while a VBA.

Després d’inserir l’únic número, el meu codi hauria d’esperar 3 segons, de manera que quan el bucle funcioni 10 vegades hauria de ser 30 segons en total.

Codi:

 Sub Sleep_Example2 () Dim k Com enter k = 1 Feu mentre k <= 10 cel·les (k, 1). Valor = kk = k + 1 Sleep (3000) '1000 mil·lisegons és 1 segon, de manera que 3000 equival a 3 segons. Sub 

Executeu aquest codi i haureu d'esperar un mínim de 30 segons per completar el procés.

Per fer un seguiment de l’hora exacta, utilitzeu el codi següent.

Codi:

 Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Your Code Started at" & StartTime k = 1 Fes mentre k <= 10 cel·les (k, 1). Valor = kk = k + 1 son (3000) '1000 mil·lisegons és 1 segon, de manera que 3000 equival a 3 segons Loop EndTime = Time MsgBox "Your Code Ended at" & EndTime End Sub 

Aquest codi us mostrarà 2 quadres de missatges, el primer mostrarà l’hora d’inici i el segon mostrarà l’hora de finalització.

Nota: Mentre executeu aquest codi, no podeu utilitzar Excel, fins i tot la clau d’escapament no funcionarà.