Excel VBA Sleep-funktion til pause i din makrokode

Excel VBA Sleep-funktion

VBA Sleep- funktion er en Windows-funktion, der er til stede under Windows DLL-filer, der bruges til at stoppe eller stoppe makroproceduren i at køre i et bestemt tidsrum, efter at en vis mængde vi kan genoptage programmet.

Der er situationer, hvor vi har brug for at sætte vores makrokøringsproces på pause for at fuldføre andre sæt opgaver. Andre sæt opgaver kan være en del af vores kodning eller en del af en anden makroprocedure, eller det kan være input til den aktuelle excel-makro. Hvordan kan du sætte programmet på pause, når det kører? Vi kan stoppe procedurekoden i et stykke tid, som er angivet af brugeren, og efter det kan vi genoptage programmet. Vi kan gøre dette i VBA ved hjælp af SLEEP-funktionen.

Hvad gør VBA-søvnfunktion?

SOV som navnet i sig selv siger “sove i et stykke tid”, “hvile i nogen tid”, “pause for tid”, fritid i nogen tid ”osv. Dvalefunktion giver brugerne mulighed for at sætte vores makro-kode på pause i millisekunder. Ved hjælp af dette kan vi forsinke processen med makro kode.

Hvis du tror, ​​at vi har en indbygget funktion kaldet SLEEP, så tager du fejl, fordi der i VBA ikke er sådan en funktion, men vi har en funktion kaldet Sleep som en Windows-funktion. Ved at indtaste et specielt sæt kode kan vi faktisk kalde denne funktion i VBA. Faktisk er det en funktion, der findes i Windows DLL-filer, så vi er nødt til at erklære API-nomenklaturen inden subrutinen i vba starter.

Nedenfor er VBA-koden.

Kode:

# Hvis VBA7 Derefter erklærer Public PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'For 64-bit versioner af Excel # Ellers Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' For 32-bit versioner af Excel # Afslut hvis 

Kopier ovenstående og indsæt i dit modul, før du begynder at skrive makrokoderne. Det skal indsættes sådan i dit modul.

Eksempel

Før jeg viser dig, hvordan du skriver koden, skal jeg fortælle dig lidt om søvnfunktionen. Det forsinker processen i millisekunder. Så 1 sekund er lig med 1000 millisekunder, hvis du vil pause i 10 sekunder, skal det være 10000 millisekunder.

Du kan downloade denne VBA Sleep Excel-skabelon her - VBA Sleep Excel-skabelon

Eksempel nr. 1

Når API-koden er indsat inden starten af ​​underproceduren, skal du oprette et makronavn.

Kode:

# Sub Sleep_Example1 () Afslut Sub 

Erklær to variabler som en streng.

Kode:

 Dim StartTime As String Dim EndTime As String 

Til StartTime- variablen tildeles værdien af ​​TIME-funktionen. Bemærk: TID i excel-funktionen returnerer den aktuelle tid.

Kode:

StartTime = Tid

Nu viser vi denne meddelelse i meddelelsesboksen VBA.

Kode:

StartTime = Time MsgBox StartTime

Nu stopper vi koden i 10 sekunder ved hjælp af dvalefunktionen. Som jeg fortalte, stopper koden i millisekunder, så for at holde pause i 10 sekunder er vi nødt til at bruge 10000 millisekunder.

Kode:

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

Brug nu den anden variabel EndTime, og tildel den aktuelle tid.

Kode:

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

Nu indeholder to variabler StartTime og EndTime makro starttid og sluttid. Kør denne makro, først ser vi makro starttid, dvs. aktuel tid i dit system.

Klik på OK, den vil sove i 10 sekunder. Du kan se buffersymbolet.

Efter 10 sekunder begynder det at genoptage koden, så det viser sluttiden, dvs. efter at have ventet i 10 sekunder, hvad det aktuelle tidspunkt er nu.

Nu kan du se makro startet kl. 10:54:14 og sluttede kl. 10:54:24 dvs. præcis 10-sekunders forskellen er der. I disse 10 sekunder sætter VBA koden på pause.

Eksempel # 2 - Dvalefunktion i sløjfer

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.