Az Excel VBA alvó funkció szünetelteti a makrokódot

Excel VBA alvó funkció

A VBA Sleep funkció egy Windows függvény, amely a Windows DLL fájlok alatt található, és amely a makró eljárás futtatásának leállítására vagy szüneteltetésére szolgál egy bizonyos ideig, miután a program bizonyos időtartama folytatható.

Vannak olyan helyzetek, amikor szüneteltetnünk kell a makrófuttatási folyamatot más feladatsorok teljesítéséhez. Más feladatsorok lehetnek kódolásunk vagy más makroprocedúra részei, vagy bevihetők az aktuális excel makrókhoz. Hogyan szüneteltetheti a programot, amikor fut? A felhasználó által meghatározott ideig szüneteltethetjük az eljárási kódot, és ezt követően bizonyos mennyiségű programot folytathatjuk. Ezt megtehetjük a VBA-ban a SLEEP függvény használatával.

Mit csinál a VBA alvás funkció?

SLEEP, mivel maga a név azt mondja: „aludni egy ideig”, „pihenni egy ideig”, „szünet egy időre”, egy időre kikapcsolni ”stb. Ennek használatával késleltethetjük a makrokód folyamatát.

Ha úgy gondolja, hogy van egy SLEEP nevű beépített függvényünk, akkor téved, mert a VBA-ban nincs ilyen függvény, inkább egy Sleep nevű funkcióval rendelkezünk, mint egy Windows funkcióval. Egy speciális kódkészlet beírásával ezt a függvényt valóban meghívhatjuk a VBA-ban. Valójában ez egy olyan funkció, amely a Windows DLL fájlokban található, ezért az vba alprogram kezdete előtt deklarálnunk kell az API nómenklatúráját.

Az alábbiakban a VBA kód található.

Kód:

# Ha VBA7, akkor Nyilvános deklarálja a PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) "Az Excel 64 bites verzióinak Excel # End If 

Másolja a fentieket, és illessze be a modulba, mielőtt elkezdi írni a makrókódokat. Így kell beilleszteni a modulba.

Példa

Mielőtt megmutatnám a kódírás módját, hadd mondjak el többet az alvás funkcióról. Ezredmásodpercekben késlelteti a folyamatot. Tehát 1 másodperc egyenlő 1000 milliszekundummal, ha 10 másodpercig szünetet szeretne tartani, annak 10000 milliszekundumnak kell lennie.

Ezt a VBA Sleep Excel sablont innen töltheti le - VBA Sleep Excel sablont

1. példa

Miután az API-kód beillesztésre került a Sub eljárás megkezdése előtt, hozzon létre egy makrónevet.

Kód:

# Sub Sleep_Példa1 () End Sub 

Nyújtson be két változót stringként.

Kód:

 Dim StartTime as String A Dim EndTime as String 

A StartTime változóhoz rendelje hozzá a TIME függvény értékét. Megjegyzés: A TIME az excel függvényben az aktuális időt adja vissza.

Kód:

StartTime = Idő

Most ezt az üzenetet megjelenítjük a VBA üzenetmezőben.

Kód:

StartTime = Idő MsgBox StartTime

Most 10 másodpercig szüneteltetjük a kódot az alvás funkció használatával. Mint mondtam, ez a másodperc szünetelteti a kódot, így 10 másodperc szünetre 10000 milliszekundumot kell használnunk.

Kód:

 Alvás_példa1 () Dim StartTime mint karakterlánc Dim EndTime As karakterlánc StartTime = Time MsgBox StartTime Sleep (10000) End Sub 

Most használja a második EndTime változót, és rendelje hozzá az aktuális időt.

Kód:

 Alvás_Példa1 () Dim StartTime mint karakterlánc Dim EndTime As karakterlánc StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub 

Most két változó, a StartTime és EndTime fogja tartani a makró kezdési és befejezési idejét. Futtassa ezt a makrót, először látni fogjuk a makró kezdési idejét, azaz az aktuális időt a rendszerében.

Kattintson az OK gombra, 10 másodpercig alszik. Láthatja a puffer szimbólumot.

10 másodperc múlva megkezdi a kód folytatását, így megmutatja a befejezés időpontját, azaz 10 másodperc várakozás után mi az aktuális idő.

Most láthatja, hogy a makró 10: 54: 14-kor kezdődött és 10: 54: 24-kor ért véget, vagyis pontosan ott van a 10 másodperces különbség. Ebben a 10 másodpercben a VBA szünetelteti a kód futtatását.

2. példa - Alvás funkció hurokban

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.