VBA-tauko | Keskeytä VBA-koodi lepotilassa ja odota -toiminnolla

Keskeytä VBA-koodin suorittaminen

VBA-taukoa käytetään keskeyttämään koodi suorittamasta sitä tietyn ajanjakson ajan ja keskeyttämään koodi VBA: ssa, jota käytämme application.wait-menetelmällä.

Kun rakennamme suuria VBA-projekteja suoritettuamme jotain, saatamme joutua odottamaan jonkin aikaa muiden tehtävien suorittamiseen. Kuinka tällaisissa tilanteissa keskeytämme makrokoodin tehtävämme suorittamiseksi? Voimme keskeyttää VBA-koodin tietyksi ajaksi käyttämällä kahta toimintoa ja nämä toiminnot ovat “Odota” ja “Lepotila”.

Kuinka keskeyttää koodi odotusmenetelmällä?

"Odota" on toiminto, jota käytämme VBA: ssa pitämään makron käynnissä tietyn ajan. Soveltamalla tätä toimintoa meidän on mainittava, mihin aikaan koodin odotetaan.

Voit ladata tämän VBA Pause Excel -mallin täältä - VBA Pause Excel -malli

Esimerkiksi, jos suoritat koodia klo 13:00:00, jos annat ajanjaksoksi 13:15:00, se pitää makroa käynnissä 15 minuuttia.

Katsokaa nyt WBA-funktion argumenttia VBA: ssa.

Aika-argumentissa meidän on mainittava, milloin koodimme pitäisi keskeyttää tai odottaa.

Katso esimerkiksi alla olevaa VBA-koodia.

Koodi:

 Ala-tauon_esimerkki1 () Alue ("A1"). Arvo = "Hei" -alue ("A2"). Arvo = "Tervetuloa" -sovellus. Odota ("13:15:00") Alue ("A3"). Arvo = " VBA: lle "End Sub 

Muista tämän koodin suorittamisen aikana, että järjestelmän aika on 13:00:00, heti kun suoritan koodin, se suorittaa kaksi ensimmäistä riviä eli

Alue ("A1"). Arvo = "Hei" ja alue ("A2"). Arvo = "Tervetuloa"

Mutta jos katsot seuraavaa riviä, siinä lukee Application.Wait (“13:15:00”), joten näiden rivitehtävien suorittamisen jälkeen makroni keskeytyy 15 minuutiksi, ts. Klo 13.00 alkaen se odottaa järjestelmääni aika saavuttaa 13:15:01.

Kun järjestelmäni aika on saavuttanut tuon ajan, se suorittaa jäljellä olevat koodirivit.

Alue ("A3"). Arvo = "VBA: lle"

Tämä ei kuitenkaan ole paras tapa harjoitella taukokoodia, sanotaan, että käytät koodia eri aikoina, meidän on käytettävä NYT VBA -toimintoa TIME VALUE -toiminnon kanssa.

Nyt- toiminto palauttaa nykyisen päivämäärän ja kellonajan työskentelemämme järjestelmän mukaan.

TIME Value -toiminto pitää ajan välillä 00:00:00 - 23:59:29.

Ok, oletetaan, että meidän on keskeytettävä koodi 10 minuutin ajaksi, kun suoritamme koodin, niin voimme käyttää alla olevaa koodia.

Koodi:

 Ala-tauon_esimerkki1 () -alue ("A1"). Arvo = "Hei" -alue ("A2"). Arvo = "Tervetuloa" -sovellus. Odota (nyt () + TimeValue ("00:00:10")) -alue (" Arvo = "VBA: lle" loppuosa 

Tämä on samanlainen kuin edellinen koodi, mutta ainoa ero on, että olemme lisänneet NOW & TIME VALUE -toiminnon.

Aina kun suoritamme tämän koodin, se pitää tai keskeyttää suorituksen 10 minuutin ajan.

Kuinka keskeyttää VBA-koodi lepotilassa?

Lepotila on monimutkainen toiminto VBA: ssa, koska se ei ole sisäänrakennettu toiminto. Koska se ei ole sisäänrakennettu, jotta se olisi käytettävissä, meidän on lisättävä alla oleva koodi moduulimme yläosaan.

Koodi:

# Jos VBA7 Tällöin julkinen julistaa PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMillisekuntia niin pitkäPtr) "64-bittisille järjestelmille # Muu julkinen julistaa Sub Sleep Lib" kernel32 "(ByVal dwMillisekunnit niin kauan) # End If '32-bittisille järjestelmille 

Sinun tarvitsee vain kopioida yllä oleva koodi ja liittää se moduulin yläosaan.

Syy, miksi meidän on lisättävä yllä oleva koodi, koska SLEEP on VBA-toiminto, joka esitetään Windowsin DLL-tiedostoissa, joten meidän on ilmoitettava nimikkeistö ennen alimenettelyn aloittamista.

Ok, katsotaanpa nyt SLEEP-toiminnon esimerkkiä.

Koodi:

 Sub Pause_Example2 () Himmennä StartTime merkkijonona Dim EndTime As String Aloitusaika = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub 

Ensinnäkin olemme julistaneet kaksi muuttujaa merkkijonoksi.

 Himmennä alkamisaika merkkijonona Himmennä loppuaika merkkijonona 

Sitten olemme määrittäneet TIME excel -toiminnon StartTime-muuttujalle. TIME-funktio palauttaa nykyisen ajan järjestelmän mukaan.

StartTime = Aika

Sitten olemme määrittäneet saman näytettäväksi viestiruudussa.

MsgBox StartTime

Sitten olen käyttänyt SLEEP-toimintoa lepotilana (10000).

Tässä 10000 on millisekuntia, mikä on yhtä suuri kuin 10 sekuntia VBA: ssa.

Viimeinkin olen vihdoin määrittänyt yhden TIME-funktion muuttujalle EndTime .

Nyt olen jälleen kirjoittanut koodin ajan näyttämiseksi.

EndTime = aika

Tämä näyttää eron aloitusajan ja lopetusajan välillä.

Suoritan nyt koodin ja näen mikä aloitusaika on.

Kun suoritan koodin, järjestelmän aika on 13:40:48 ja nyt koodi nukkuu 10 sekuntia. Lopussa aikani on seuraava.

Joten tällä tavoin voimme keskeyttää koodin suorittamisen tietyn ajan.


$config[zx-auto] not found$config[zx-overlay] not found