Funkcija mirovanja v Excelu VBA za zaustavitev makro kode

Funkcija mirovanja v programu Excel VBA

Funkcija mirovanja VBA je funkcija okna, ki je prisotna v datotekah DLL Windows in se uporablja za zaustavitev ali zaustavitev postopka makra za določen čas po tem, ko lahko določeno količino programa nadaljujemo.

Obstajajo situacije, ko moramo zaustaviti postopek izvajanja makra, da dokončamo druge nize nalog. Drugi sklopi nalog so lahko del našega kodiranja ali del drugega postopka makra ali pa so vhodni podatki za trenutni makro excel. Kako lahko zaustavite program, ko se izvaja? Kodo postopka lahko zaustavimo za nekaj časa, ki ga določi uporabnik, in po tem lahko določeno količino programa nadaljujemo. To lahko storimo v VBA s funkcijo SLEEP.

Kaj počne funkcija VBA spanja?

SPAJ, kot že samo ime pove, »nekaj časa spi«, »nekaj časa počivaj«, »začasno ustavi«, nekaj časa počivaj itd. … Funkcija spanja uporabnikom omogoča, da zaustavijo našo kodo makra za milisekunde . S tem lahko zakasnimo postopek makro kode.

Če menite, da imamo vgrajeno funkcijo, imenovano SLEEP, se motite, ker v VBA take funkcije ni. Namesto tega imamo funkcijo spanje kot funkcijo windows. Z vnosom posebnega nabora kod lahko to funkcijo dejansko pokličemo v VBA. Dejansko gre za funkcijo, ki je prisotna v datotekah Windows DLL, zato moramo nomenklaturo API razglasiti pred začetkom podprograma v VBA.

Spodaj je koda VBA.

Koda:

# Če VBA7 nato javno izjavi PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Za 64-bitne različice Excela #Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Za 32-bitne različice Excel #End If

Kopirajte zgornje in prilepite v svoj modul, preden začnete pisati kode makrov. Tako naj bo prilepljen v vaš modul.

Primer

Preden vam pokažem način pisanja kode, naj vam še malo povem o funkciji spanja. Zakasni postopek v milisekundah. Torej 1 sekunda je enaka 1000 milisekund, če želite začasno ustaviti 10 sekund, bi moralo biti 10000 milisekund.

Primer # 1

Ko kodo API prilepite pred začetkom postopka Sub, ustvarite ime makra.

Koda:

#Sub Sleep_Example1 () End Sub

Navedite dve spremenljivki kot niz.

Koda:

Zatemni čas začetka kot niz Zatemni čas začetka kot niz

Za spremenljivko StartTime dodelite vrednost funkcije TIME. Opomba: TIME v funkciji excel vrne trenutni čas.

Koda:

StartTime = Čas

Zdaj bomo to sporočilo prikazali v polju za sporočila VBA.

Koda:

StartTime = Time MsgBox StartTime

Zdaj bomo kodo zaustavili za 10 sekund s pomočjo funkcije spanja. Kot sem že povedal, kodo zaustavi v milisekundah, torej za 10 sekund. Uporabiti moramo 10000 milisekund.

Koda:

Sub Sleep_Example1 () Dim StartTime kot niz Dim Dim EndTime kot niz StartTime = Time MsgBox StartTime Sleep (10000) End Sub

Zdaj uporabite drugo spremenljivko EndTime in dodelite trenutni čas.

Koda:

Sub Sleep_Example1 () Dim StartTime kot niz Dim Dim EndTime kot niz StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub

Zdaj dve spremenljivki StartTime in EndTime vsebujeta začetni in končni čas makra. Zaženi ta makro; najprej bomo videli začetni čas makra, tj. trenutni čas v vašem sistemu.

Kliknite V redu. Spala bo 10 sekund. Vidite lahko simbol medpomnilnika.

Po 10 sekundah bo začela nadaljevati s kodo, tako da bo prikazovala čas konca, tj. Po čakanju 10 sekund, kolikšen je trenutni čas.

Zdaj lahko vidite makro, ki se je začel ob 10:54:14 in končal ob 10:54:24, torej natanko 10-sekundna razlika je tam. V teh 10 sekundah VBA zaustavi zagnano kodo.

2. primer - funkcija spanja v zankah

Spanje je najbolje uporabiti z zankami v VBA. Na primer, želim vstaviti serijske številke od 1 do 10 z uporabo zanke Do while v VBA.

Po vstavitvi ene številke mora moja koda počakati 3 sekunde, tako da, ko se zanka zažene 10-krat, mora biti skupaj 30 sekund.

Koda:

Sub Sleep_Example2 () Dim k Kot celo število k = 1 Do While k <= 10 celic (k, 1). Pod

Zaženite to kodo in na postopek morate počakati najmanj 30 sekund.

Če želite natančno slediti času, uporabite spodnjo kodo.

Koda:

Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Vaša koda se je začela ob" & StartTime k = 1 Do While k <= 10 celic (k, 1). Vrednost = kk = k + 1 Sleep (3000) '1000 miliseond je 1 sekunda, tako da je 3000 enako 3 sekund Loop EndTime = Time MsgBox "Vaša koda se je končala ob" & EndTime End Sub

Ta koda vam bo prikazala 2 polji za sporočila, prvo bo prikazalo začetni čas, drugo pa končni čas.

Opomba: Med izvajanjem te kode ne morete uporabljati excela. Tudi tipka za izhod ne bo delovala.

Zanimive Članki...