VBA-slaapfunctie

Excel VBA-slaapfunctie

VBA-slaapfunctie is een Windows-functie die aanwezig is onder Windows DLL-bestanden en die wordt gebruikt om de macro-procedure te stoppen of te pauzeren gedurende een bepaalde tijd nadat we het programma kunnen hervatten.

Er zijn situaties waarin we ons macro-lopende proces moeten pauzeren om andere sets taken te voltooien. Andere reeksen taken kunnen deel uitmaken van onze codering of deel uitmaken van een andere macro-procedure, of het kan worden ingevoerd voor de huidige Excel-macro. Hoe kun je het programma pauzeren als het wordt uitgevoerd? We kunnen de procedurecode enige tijd onderbreken die door de gebruiker is gespecificeerd en daarna kunnen we het programma hervatten. We kunnen dit in VBA doen door de SLEEP-functie te gebruiken.

Wat doet de VBA-slaapfunctie?

SLEEP zoals de naam zelf zegt: "enige tijd slapen", "enige tijd rusten", "pauzeren voor tijd", enige tijd vrij zijn "enz .. Met de slaapfunctie kunnen gebruikers onze macrocode milliseconden pauzeren. Hiermee kunnen we het proces van macrocode vertragen.

Als je denkt dat we een ingebouwde functie hebben met de naam SLEEP, dan heb je het mis, want in VBA is er geen dergelijke functie, maar hebben we een functie genaamd Sleep als een Windows-functie. Door een speciale set code in te voeren, kunnen we deze functie in VBA daadwerkelijk aanroepen. In feite is het een functie die aanwezig is in Windows DLL-bestanden, dus we moeten de nomenclatuur van API declareren voordat de subroutine in vba begint.

Hieronder staat de VBA-code.

Code:

# If VBA7 Then Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Voor 64-bits versies van Excel # Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Voor 32-bits versies van Excel # End If 

Kopieer het bovenstaande en plak in uw module voordat u begint met het schrijven van de macrocodes. Het zou zo in uw module moeten worden geplakt.

Voorbeeld

Voordat ik je de manier laat zien om de code te schrijven, wil ik je nog wat meer vertellen over de slaapfunctie. Het vertraagt ​​het proces in milliseconden. Dus 1 seconde is gelijk aan 1000 milliseconden, als je 10 seconden wilt pauzeren, zou dit 10000 milliseconden moeten zijn.

U kunt deze VBA Sleep Excel-sjabloon hier downloaden - VBA Sleep Excel-sjabloon

Voorbeeld 1

Zodra de API-code is geplakt voordat de Sub-procedure begint, maakt u een macronaam.

Code:

# Sub Sleep_Example1 () End Sub 

Declareer twee variabelen als een string.

Code:

 Dim StartTime As String Dim EndTime As String 

Wijs voor de StartTime- variabele de waarde toe van de TIME-functie. Opmerking: TIME in Excel-functie geeft de huidige tijd terug.

Code:

StartTime = Tijd

Nu zullen we dit bericht weergeven in het berichtvenster VBA.

Code:

StartTime = Tijd MsgBox StartTime

Nu zullen we de code 10 seconden pauzeren met behulp van de slaapfunctie. Zoals ik al zei, pauzeert het de code in milliseconden, dus om 10 seconden te pauzeren, moeten we 10000 milliseconden gebruiken.

Code:

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

Gebruik nu de tweede variabele EndTime en wijs de huidige tijd toe.

Code:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Tijd MsgBox StartTime Slaap (10000) EndTime = Tijd MsgBox EndTime End Sub 

Nu twee variabelen StartTime en Eindtijd zal macro begin en eindtijd vast te houden. Voer deze macro uit, eerst zullen we de starttijd van de macro zien, dwz de huidige tijd in uw systeem.

Klik op OK, het zal 10 seconden slapen. U kunt het buffersymbool zien.

Na 10 seconden begint het de code te hervatten, dus het zal de eindtijd tonen, dwz na 10 seconden wachten, wat is nu de huidige tijd.

Nu kun je zien dat de macro begon om 10:54:14 en eindigde om 10:54:24, dwz precies het verschil van 10 seconden is er. In die 10 seconden pauzeert VBA de uitvoering van de code.

Voorbeeld # 2 - Slaapfunctie in lussen

Slaap kan het beste worden gebruikt met loops in VBA. Ik wil bijvoorbeeld serienummers van 1 tot 10 invoegen met Do while-lus in VBA.

Na het invoeren van het enige nummer moet mijn code 3 seconden wachten, dus als de lus 10 keer loopt, zou het in totaal 30 seconden moeten zijn.

Code:

 Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Cellen (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milliseconden is 1 seconde, dus 3000 is gelijk aan 3 seconden Loop End Sub 

Voer deze code uit en je moet minimaal 30 seconden wachten om het proces te voltooien.

Gebruik de onderstaande code om de exacte tijd bij te houden.

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 Cellen (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milliseonden is 1 seconde, dus 3000 is gelijk aan 3 seconden Loop EndTime = Time MsgBox "Your Code Ended at" & EndTime End Sub 

Deze code zal je 2 berichtvenster tonen, de eerste toont de begintijd en de tweede toont de eindtijd.

Opmerking: terwijl u deze code uitvoert, kunt u Excel niet gebruiken, zelfs de escape-toets werkt niet.