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 sablont1. 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.