Funcția de repaus VBA Excel pentru a vă întrerupe codul macro

Funcția Excel VBA Sleep

Funcția VBA Sleep este o funcție Windows prezentă în fișierele DLL Windows, care este utilizată pentru a opri sau a întrerupe procedura macro pentru a rula pentru o anumită perioadă de timp după ce o anumită cantitate de noi putem relua programul.

Există situații în care trebuie să întrerupem procesul de rulare a macro-ului pentru a finaliza alte seturi de sarcini. Alte seturi de sarcini ar putea face parte din codificarea noastră sau parte a altei proceduri macro sau ar putea fi introduse pentru macro-ul Excel actual. Cum puteți întrerupe programul atunci când rulează? Putem întrerupe codul de procedură pentru o perioadă de timp specificată de utilizator și, după aceea, o anumită cantitate din noi putem relua programul. Putem face acest lucru în VBA folosind funcția SLEEP.

Ce face funcția VBA Sleep?

SLEEP, așa cum spune și numele, „dormi o vreme”, „odihnește-te o vreme”, „întrerupe-te o perioadă”, oprește-te ceva timp, etc. Funcția Sleep permite utilizatorilor să întrerupă codul nostru macro timp de milisecunde . Folosind aceasta, putem întârzia procesul de cod macro.

Dacă credeți că avem o funcție încorporată numită SLEEP, atunci vă înșelați deoarece, în VBA, nu există o astfel de funcție. Mai degrabă, avem o funcție numită Sleep ca funcție Windows. Prin introducerea unui set special de coduri, putem apela de fapt această funcție în VBA. De fapt, este o funcție prezentă în fișierele DLL Windows, așa că trebuie să declarăm nomenclatorul API înainte de începerea subrutinei în VBA.

Mai jos este codul VBA.

Cod:

#If VBA7 Atunci Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Pentru versiunile de 64 de biți de Excel #Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Pentru versiunile de 32 de biți de Excel #End If

Copiați cele de mai sus și lipiți-le în modul înainte de a începe să scrieți codurile macro. Ar trebui lipit astfel în modulul dvs.

Exemplu

Înainte de a vă arăta modul de scriere a codului, permiteți-mi să vă povestesc ceva mai mult despre funcția de somn. Întârzie procesul în milisecunde. Deci, 1 secundă este egal cu 1000 de milisecunde, dacă doriți să faceți o pauză timp de 10 secunde, ar trebui să fie de 10000 de milisecunde.

Exemplul nr. 1

Odată ce codul API a fost lipit înainte de începerea procedurii Sub, creați un nume de macro.

Cod:

#Sub Sleep_Example1 () End Sub

Declarați două variabile ca un șir.

Cod:

Dim StartTime as String Dim EndTime As String

Pentru variabila StartTime , atribuiți valoarea funcției TIME. Notă: TIME în funcția excel returnează ora curentă.

Cod:

StartTime = Ora

Acum vom afișa acest mesaj în caseta de mesaje VBA.

Cod:

StartTime = Ora MsgBox StartTime

Acum vom întrerupe codul timp de 10 secunde folosind funcția de repaus. După cum am spus, acesta întrerupe codul în milisecunde, deci pentru a face o pauză timp de 10 secunde. Trebuie să folosim 10000 de milisecunde.

Cod:

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

Acum utilizați a doua variabilă, EndTime și atribuiți ora curentă.

Cod:

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

Acum, două variabile StartTime și EndTime, vor păstra ora de început și ora de sfârșit a macro-ului. Rulați această macro; la început, vom vedea ora de pornire a macro-ului, adică ora curentă în sistemul dvs.

Faceți clic pe OK. Va dormi 10 secunde. Puteți vedea simbolul tampon.

După 10 secunde, va începe să reia codul, astfel încât va afișa ora de încheiere, adică, după ce așteptați 10 secunde, care este ora curentă acum.

Acum puteți vedea macro-ul a început la 10:54:14 și s-a încheiat la 10:54:24, adică exact diferența de 10 secunde este acolo. În acele 10 secunde, VBA întrerupe codul care rulează.

Exemplul # 2 - Funcția Sleep în bucle

Somnul este cel mai bine folosit cu bucle în VBA. De exemplu, vreau să introduc numere de serie de la 1 la 10 folosind bucla Do while în VBA.

După introducerea numărului unic, codul meu ar trebui să aștepte 3 secunde, deci atunci când bucla rulează de 10 ori, ar trebui să fie de 30 de secunde în total.

Cod:

Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Celule (k, 1). Valoare = kk = k + 1 Sleep (3000) '1000 milisecunde este 1 secundă, deci 3000 este egal cu 3 secunde Loop End Sub

Rulați acest cod și trebuie să așteptați cel puțin 30 de secunde pentru a finaliza procesul.

Pentru a urmări ora exactă, utilizați codul de mai jos.

Cod:

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 Do While k <= 10 Cells (k, 1). Valoare = kk = k + 1 Sleep (3000) '1000 de miliseunde este 1 secundă, deci 3000 este egal cu 3 secunde Loop EndTime = Time MsgBox "Codul tău s-a încheiat la" & EndTime End Sub

Acest cod vă va afișa 2 casete de mesaj, prima va arăta ora de începere, iar a doua va arăta ora de încheiere.

Notă: În timp ce rulați acest cod, nu puteți utiliza Excel. Nici cheia de evacuare nu va funcționa.

Articole interesante...