Funkcia spánku Excel VBA na pozastavenie vášho makrokódu

Funkcia spánku Excel VBA

Funkcia VBA Sleep je funkcia systému Windows prítomná v súboroch DLL systému Windows, ktorá sa používa na zastavenie alebo pozastavenie spustenia postupu makra po stanovenú dobu po uplynutí určitého času, počas ktorého môžeme program obnoviť.

Existujú situácie, kedy musíme proces spustenia makra pozastaviť, aby sme mohli dokončiť ďalšie súbory úloh. Ďalšie súbory úloh môžu byť súčasťou nášho kódovania alebo súčasťou iného postupu makra alebo môžu byť vstupom pre aktuálne makro programu Excel. Ako môžete pozastaviť spustený program? Môžeme pozastaviť kód procedúry na nejaký čas stanovený používateľom a po uplynutí tejto doby môžeme program obnoviť. Môžeme to urobiť vo VBA pomocou funkcie SLEEP.

Čo robí funkcia spánku VBA?

SLEEP, ako už samotný názov hovorí: „spánok na nejaký čas“, „odpočinok na nejaký čas“, „pozastavenie na nejaký čas“, nejaký čas na voľno “atď. Funkcia spánku umožňuje používateľom pozastaviť náš makrokód na dobu milisekúnd. Pomocou toho môžeme oddialiť proces makrokódu.

Ak si myslíte, že máme vstavanú funkciu s názvom SLEEP, mýlite sa, pretože vo VBA takáto funkcia nie je, skôr máme funkciu s názvom Spánok ako funkcia systému Windows. Zadaním špeciálnej sady kódu môžeme túto funkciu volať vo VBA. V skutočnosti je to funkcia prítomná v súboroch DLL systému Windows, takže pred začiatkom podprogramu vo vba musíme deklarovať nomenklatúru API.

Nižšie je uvedený kód VBA.

Kód:

# Ak VBA7 Potom Public vyhlási PtrSafe Sub Sleep Lib „kernel32“ (ByVal dwMilliseconds As LongPtr) 'Pre 64-bitové verzie programu Excel # Else Public Declare Sub Sleep Lib „kernel32“ (ByVal dwMilliseconds As Long)' pre 32-bitové verzie Excel # Koniec Ak 

Skopírujte vyššie uvedené a vložte do svojho modulu skôr, ako začnete písať kódy makier. Takto by to malo byť vložené do vášho modulu.

Príklad

Skôr ako vám ukážem spôsob písania kódu, poviem vám niečo viac o funkcii spánku. Proces sa oneskoruje o milisekundy. Takže 1 sekunda sa rovná 1 000 milisekúnd, ak chcete 10 sekúnd pozastaviť, mala by to byť 10 000 milisekúnd.

Túto šablónu VBA Sleep Excel si môžete stiahnuť tu - Šablóna VBA Sleep Excel

Príklad č

Po vložení kódu API pred začiatkom procedúry Sub vytvorte názov makra.

Kód:

# Sub Sleep_Example1 () End Sub 

Deklarujte dve premenné ako reťazec.

Kód:

 Dim StartTime As String Dim EndTime As String 

Pri premennej StartTime priraďte hodnotu funkcii TIME. Poznámka: Funkcia TIME v programe Excel vráti aktuálny čas.

Kód:

StartTime = čas

Teraz túto správu zobrazíme v schránke správ VBA.

Kód:

StartTime = Čas MsgBox StartTime

Teraz pomocou funkcie spánku pozastavíme kód na 10 sekúnd. Ako som povedal, pozastavuje kód v milisekundách, aby sme ho pozastavili na 10 sekúnd, musíme použiť 10 000 milisekúnd.

Kód:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Čas MsgBox StartTime Sleep (10 000) End Sub 

Teraz použite druhú premennú EndTime a priraďte aktuálny čas.

Kód:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10 000) EndTime = Time MsgBox EndTime End Sub 

Teraz budú dve premenné StartTime a EndTime obsahovať počiatočný a konečný čas makra. Spustite toto makro, najskôr uvidíme začiatočný čas makra, tj aktuálny čas vo vašom systéme.

Kliknite na OK, bude spať 10 sekúnd. Môžete vidieť symbol medzipamäte.

Po 10 sekundách začne kód pokračovať, takže sa zobrazí konečný čas, tj. Po 10 sekundách čakania je aktuálny aktuálny čas.

Teraz môžete vidieť, že makro začalo o 10:54:14 a skončilo o 10:54:24, čo znamená, že existuje presne 10-sekundový rozdiel. Za tých 10 sekúnd VBA pozastaví spustenie kódu.

Príklad č. 2 - Funkcia spánku v slučkách

Sleep is best used with loops in VBA. For example, I want to insert serial numbers from 1 to 10 using Do while loop in VBA.

After inserting the one number my code should wait for 3 seconds, so when the loop runs for 10 times it should be 30 seconds in total.

Code:

 Sub Sleep_Example2() Dim k As Integer k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseconds is 1 second so 3000 is equal to 3 seconds Loop End Sub 

Run this code and you have to wait for a minimum of 30 seconds to complete the process.

To track the exact time use the below code.

Code:

 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).Value = k k = k + 1 Sleep (3000) '1000 milliseonds is 1 second so 3000 is equal to 3 seconds Loop EndTime = Time MsgBox "Your Code Ended at " & EndTime End Sub 

This code will display you 2 message box, the first one will show the starting time and the second one will show the end time.

Note: While running this code, you cannot use excel, even the escape key will not work.