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, joudumme ehkä odottamaan jonkin aikaa tekemään muita tehtäviä. 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. Tätä toimintoa soveltamalla meidän on mainittava, mihin aikaan koodin odotetaan.

Esimerkiksi, jos suoritat koodia klo 13:00:00, jos annat kellonajaksi "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-tauko_esimerkki1 () Alue ("A1"). Arvo = "Hei" -alue ("A2"). Arvo = "Tervetuloa" -sovellus.Odotus ("13:15:00") Alue ("A3"). Arvo = " VBA: lle "End Sub

Muista, että tätä koodia suoritettaessa 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 rivien tehtävien suorittamisen jälkeen makroni keskeytetään 15 minuutiksi, ts. Klo 13:00:00 lähtien. odottaa, kunnes järjestelmäaikani saavuttaa 13:15:01.

Kun järjestelmääni saavuttaa tuon ajan, se suorittaa jäljellä olevat koodirivit.

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

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

Now- 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 julkinen julistaa sitten PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMillisekunnit niin kauan kuin on) "64-bittisissä järjestelmissä #Else Public Declare Sub Sleep Lib" kernel32 "(ByVal dwMillisekunnit niin kauan) #End If '32-bittisissä järjestelmissä

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-funktion 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 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 koodini nukkuu 10 sekuntia. Loppujen lopuksi aikani on seuraava.

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

Mielenkiintoisia artikkeleita...