Excel VBA-slaapfunctie om uw macrocode te pauzeren

Inhoudsopgave

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 ze kunnen 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, "slaap een tijdje", "rust een tijdje", "pauzeer een tijdje", een tijdje vrij, "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 een dergelijke functie niet. We hebben eerder een functie genaamd Slaap als een Windows-functie. Door een speciale set codes in te voeren, kunnen we deze functie ook daadwerkelijk aanroepen in VBA. 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 Vervolgens openbaar PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Voor 64-bits versies van Excel declareren #Else Public Declare Sub Sleep Lib' kernel32 '(ByVal dwMilliseconds As Long)' Voor 32-bits versies van Excel #Einde als

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

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 van de TIME-functie toe. 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. We hebben 10.000 milliseconden nodig.

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. Draai deze macro; 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, zodat het de eindtijd laat zien, 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, dat wil zeggen, precies het verschil van 10 seconden is er. In die 10 seconden pauzeert VBA de code die wordt uitgevoerd.

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 ene nummer, zou mijn code 3 seconden moeten wachten, dus als de lus 10 keer wordt uitgevoerd, 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 Cells (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 u 2 berichtvensters 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.

Interessante artikelen...