Excel VBA-lepotila keskeyttää makrokoodisi

Excel VBA-lepotila

VBA Sleep -toiminto on Windows-DLL-tiedostojen alla oleva Windows-toiminto, jota käytetään pysäyttämään tai keskeyttämään makrotoiminnon suorittaminen tietyn ajan sen jälkeen, kun tietyn määrän voimme jatkaa ohjelmaa.

On tilanteita, joissa meidän on keskeytettävä makroajoprosessimme muiden tehtävien suorittamiseksi. Muut tehtäväsarjat voivat olla osa koodaustamme tai muuta makromenettelyä tai ne voidaan syöttää nykyiselle Excel-makrolle. Kuinka voit keskeyttää ohjelman, kun se on käynnissä? Voimme keskeyttää menettelytavan jonkin aikaa käyttäjän määrittelemän ajan ja tietyn määrän kuluttua voimme jatkaa ohjelmaa. Voimme tehdä tämän VBA: ssa käyttämällä SLEEP-toimintoa.

Mitä VBA-lepotila tekee?

SLEEP, koska nimi itsessään sanoo "nukkua jonkin aikaa", "levätä jonkin aikaa", "tauko ajaksi", tauko jonkin aikaa "jne.. Tämän avulla voimme viivästyttää makrokoodin prosessia.

Jos luulet, että meillä on sisäänrakennettu toiminto nimeltä SLEEP, olet väärässä, koska VBA: ssa ei ole tällaista toimintoa, pikemminkin meillä on Sleep-niminen toiminto Windows-funktiona. Syöttämällä erityinen koodisarja voimme itse kutsua tätä toimintoa VBA: ssa. Itse asiassa se on Windows DLL -tiedostojen sisällä oleva toiminto, joten meidän on ilmoitettava API: n nimikkeistö ennen aliohjelman aloittamista vba: ssa.

Alla on VBA-koodi.

Koodi:

# Jos VBA7 Julkinen sitten julistaa PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Excelin 64-bittisille versioille # Muu julkinen julistaa Sub Sleep Lib "kernel32" (ByVal dwMillisekunnit niin pitkälle)' Excel # End If 

Kopioi yllä oleva ja liitä moduuliin ennen makrokoodien kirjoittamisen aloittamista. Se tulisi liittää moduuliin näin.

Esimerkki

Ennen kuin näytän sinulle koodin kirjoittamistavan, haluan kertoa sinulle nukkumistoiminnosta vähän enemmän. Se viivästyttää prosessia millisekunteina. Joten 1 sekunti on yhtä suuri kuin 1000 millisekuntia, jos haluat keskeyttää 10 sekunnin ajan, sen pitäisi olla 10000 millisekuntia.

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

Esimerkki 1

Kun API-koodi on liitetty ennen alimenettelyn alkua, luo makron nimi.

Koodi:

# Sub Sleep_Example1 () Lopeta Sub 

Ilmoita kaksi muuttujaa merkkijonona.

Koodi:

 Himmennä alkamisaika merkkijonona Himmennä loppuaika merkkijonona 

Määritä StartTime- muuttujalle TIME-funktion arvo. Huomaa: AIKA excel-toiminnossa palauttaa nykyisen ajan.

Koodi:

StartTime = Aika

Nyt näytämme tämän viestin viestiruudussa VBA.

Koodi:

StartTime = Aika MsgBox StartTime

Nyt keskeytämme koodin 10 sekunnin ajan lepotilatoiminnon avulla. Kuten sanoin, se keskeyttää koodin millisekunteina, joten 10 sekunnin tauko on käytettävä 10000 millisekuntia.

Koodi:

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

Käytä nyt toista muuttujaa EndTime ja määritä nykyinen aika.

Koodi:

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

Nyt kaksi muuttujaa StartTime ja EndTime pitävät makron aloitus- ja lopetusajan. Suorita tämä makro, aluksi näemme makron aloitusajan eli nykyisen ajan järjestelmässäsi.

Napsauta OK, se nukkuu 10 sekuntia. Näet puskurisymbolin.

Kymmenen sekunnin kuluttua se alkaa palata koodiin, joten se näyttää lopetusajan eli odottaen 10 sekuntia mikä on tämänhetkinen aika.

Nyt näet makron, joka alkoi klo 10:54:14 ja päättyi klo 10:54:24 eli täsmälleen 10 sekunnin ero on olemassa. Näissä 10 sekunnissa VBA keskeyttää koodin suorittamisen.

Esimerkki # 2 - Lepotila silmukoissa

Lepotilaa käytetään parhaiten silmukoiden kanssa VBA: ssa. Haluan esimerkiksi lisätä sarjanumerot 1-10 käyttämällä Do while loopia VBA: ssa.

Yhden numeron lisäämisen jälkeen koodini pitäisi odottaa 3 sekuntia, joten kun silmukka kulkee 10 kertaa, sen pitäisi olla yhteensä 30 sekuntia.

Koodi:

 Alin uni_esimerkki2 () Himmennä kokonaisluku k = 1 Tee kun k <= 10 solua (k, 1). Arvo = kk = k + 1 lepotila (3000) '1000 millisekuntia on 1 sekunti, joten 3000 on 3 sekuntia Silmukan loppu Sub 

Suorita tämä koodi ja joudut odottamaan vähintään 30 sekuntia prosessin loppuun saattamiseksi.

Tarkan ajan seuraamiseksi käytä alla olevaa koodia.

Koodi:

 Sub Sleep_Example2 () Dim k kuten kokonaisluku Dim StartTime As String Dim EndTime As String StartTime = Aika MsgBox "Koodisi alkoi" & StartTime k = 1 Tee kun k <= 10 solua (k, 1) .Arvo = kk = k + 1 Lepotila (3000) '1000 millisekuntia on 1 sekunti, joten 3000 on yhtä suuri kuin 3 sekuntia Loop EndTime = Time MsgBox "Koodisi päättyi" & EndTime End Sub 

Tämä koodi näyttää sinulle 2 viestiruutua, ensimmäinen näyttää aloitusajan ja toinen näyttää lopetusajan.

Huomaa: Tätä koodia suoritettaessa et voi käyttää exceliä, edes poistumisavain ei toimi.


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