See õpetus näitab, kuidas koodi peatada / edasi lükata, kasutades VBA ootamise ja unerežiimi funktsioone.
Kui loome suuri VBA programme, mis sooritavad palju arvutusi, või kutsume võib -olla isegi välise programmi käivitama, võime nõuda, et meie VBA -kood lõpetaks töötamise teatud aja jooksul välise protsessi toimumise ajal. VBA -l on selle saavutamiseks saadaval mõned meetodid.
Rakenduse kasutamine. Oota meetod
Kui peame enne järgmise sammu täitmist oma makro töötamise mõneks ajaks peatama või kuni määratud ajani on jõutud, saame kasutada Rakendus. Oota meetod. See võib olla kasulik näiteks siis, kui oleme veebisaidile sisselogimisprotsessi automatiseerinud ja peame ootama mõne sekundi, kuni leht laaditakse, enne kui meie makro töötab edasi.
Oodake 1 sekund
Kui lisate selle rea oma makrosse, peatatakse selle käitamine umbes 1 sekundiks.
1 | Application.Wait (Now + TimeValue ("0:00:01")) |
Oota kuni
Mõnel juhul peate ootama teatud aja. Kui see rida on allpool, ei jätka teie makro kasutamist enne kella 9:
1 | Application.Oota "09:00:00" |
Pange tähele, et Rakendus. Oota ei aktsepteeri alla 1 -sekundilisi viivitusi.
VBA programmeerimine | Koodigeneraator töötab teie jaoks!
Unemeetodi kasutamine
Kui vajate oma makro peatamiseks täpsemat viisi, võite kasutada unerežiimi.
Unerežiim on Windowsi API funktsioon, see tähendab, et see ei kuulu VBA -sse. Sellele pääseb juurde spetsiaalse deklaratsiooni avaldusega.
Kui kasutate Microsoft Office'i 64-bitist versiooni, saate järgmise avaldise sisestada uude moodulisse või selle mooduli algusesse (mitte otse alamprogrammi), milles soovite unerežiimi kasutada:
1 | Avalik deklareerimine PtrSafe Sub Sleep Lib "kernel32" (ByVal Millisekundid nagu LongPtr) |
32-bitise versiooni korral kasutage seda rida:
1 | Avalik deklareerimine Sub Sleep Lib "kernel32" (ByVal Millisekundid nagu LongPtr) |
Pärast unerežiimi väljakuulutamist on teil juurdepääs sellele oma alamprogrammides järgmiselt:
1 | Maga 10000 |
Kui see rida asub teie makro kohal, peatatakse 10 000 millisekundit, st 10 sekundit.
Loopi kasutamine koos sündmustega
Ootamise ja unerežiimi kasutamise suur puudus on see, et kasutaja ei saa makro jätkamist oodates Excelis midagi teha. Kasutaja võib arvata, et Excel on lakanud reageerimast ja kasutaja saab seejärel kasutada Ctl+vaheaeg Makro katkestamiseks kaotab see eesmärgi panna makrosse paus.
Selle probleemi lahendamiseks saame kasutada tsüklit meetodiga nimega DoEvents.
1234567 | Avalik alamkatse ()Dim i As LongI = 1 kuni 20 000Vahemik (“A1”). Väärtus = iDoEventsEdasi iEnd Sub |
Nüüd, kui Excel käitab ülaltoodud makrot, saab kasutaja jätkata Exceliga suhtlemist - saame näiteks vahekaarte vahetada või lahtreid vormindada - põhimõtteliselt jätkatakse makro käivitamist, kuid Exceli ekraan pole külmutatud. Võiksime kasutada sarnast tsüklit Excelis taimerifunktsiooni loomiseks ja selle lisamiseks DoEvents meetod, mille abil saate ekraani külmutamise taimeriga töötamise ajal vabastada.