VBA DoEvents

Lang L: none (table-of-contents)

VBA DoEvents funktsioon peatab ajutiselt töötava makro, andes Excelile võimaluse klahvivajutusi, hiireklõpsu ja muid operatsioonisüsteemi teateid töödelda.

Pikaajalises töötamises makrod võivad tunduda, et Excel ripub ja ei reageeri ning makro võib olla võimatu katkestada. Kui DoEvents on teie koodi kaasatud, võivad kasutajad olla kindlad, et makro töötab endiselt, ja võivad vajadusel siiski täitmise katkestada.

VBA DoEvents näide

Mõelge järgmisele koodile:

1234567891011 Avalik alamkatse ()Dim i As LongI = 1 kuni 20 000Vahemik (“A1”). Väärtus = iEdasi iEnd Sub

Seda koodi proovides märkate, et Exceli aknaga ei saa suhelda. Kuna see ei ole protsessori suhtes kuigi nõudlik, saab makro siiski katkestada, vajutades klahve ESC või CTRL+BREAK.

Kui selle tsükli sees täidetaks palju keerukaid ja nõudlikke funktsioone, kuluks Excelil võtme vajutamise sündmuse registreerimiseks kauem aega - kuni mitu minutit või võib -olla üldse mitte, eriti kui arvutis töötab samal ajal teisi programme.

Nüüd lisage vahemiku määramise alla üks rida DoEventsiga:

123 Vahemik ("A1"). Väärtus = iDoEvents

Kui käivitate selle koodi uuesti, näete, et Excel on nüüd reageeriv - seda saab fokuseerida ja esiplaanile tuua. DoEvents kutsutakse iga kord läbi tsükli, mis tagab, et makro täidab alati täitmist, nii et Excel saab töödelda talle saadetud sõnumeid. Kuna see makro töötab kiiresti, tundub peaaegu, et see töötab taustal (kuigi see pole nii) - rohkem toiminguid silmuse sees paljastaks selle illusiooni kiiresti.

DoEvents ohud

Vaadake siiski teist korda. Rohkem kui lihtsalt Exceli fokuseerimise lubamine, saate tegelikult klõpsata lahtrite sees ja isegi vahekaarte vahetada makro töötamise ajal (proovige seda - näete naljakat käitumist). See näitab DoEventsi ühte ohtu - see võib olla soovimatute tagajärgede põhjus, kui teie makro pole hoolikalt kodeeritud.

Teine oht on see, et DoEvents võib olla aken teistele makrodele. Proovige seda: asetage töölehele ActiveX CommandButton, topeltklõpsake seda ja lisage CommandButton1_Click () sündmusele järgmine kood:

1234567 Dim c As RangeIga c vahemikus ("B3: E8")c. väärtus = c. väärtus + 1Järgmine c

Lülitage Excelis välja kujundusrežiim, seejärel käivitage varem lisatud test () makro. Testmakro töötamise ajal saate töölehel klõpsata käsunupul ja sellega seotud makro käivitatakse kohe, kui DoEvents annab testi () makrole pausi.

Siin on oht, kui CommandButton makro muudab andmeid, millega Makro Test () töötas, või käivitab uuesti Test () makro. Kui te pole ettevaatlik, võite saada väga räpaseid tulemusi.

Lõpuks peaksite teadma, et DoEvents põhjustab teie makro toimimisele mõju, kui seda kutsutakse. Silmuse sees suureneb see mõju kiiresti, kui te ei piira DoEventsi kutsumise sagedust. Testi () näitele tuginedes proovige seda:

1 Kui i Mod 1000 = 0, siis DoEvents

See vähendab nähtavalt Exceli reageerimisvõimet, kuid jõudlusmõju väheneb.

Millal DoEventsit kasutada?

Nendest ohtudest hoolimata on DoEvents mugav funktsioon, mis aitab testimisel ja silumisel. Kaaluge DoEventsi lisamist pikaajalistele tsüklitele.

Teine põhjus DoEventsi kaasamiseks on lubada kasutajate tagasisidet. Näiteks võib makro värskendada UserFormi silte edenemise indikaatoritega. Ilma DoEventsita ei pruugi Excel UserFormi uuesti värvimiseks sõnumeid vastu võtta, jättes kasutajale mulje, et makro on lakanud töötamast - eriti kui lülitate teise programmi ja proovite seejärel uuesti Excelile üle minna. DoEventsiga jätkatakse aga UserFormi ülevärvimist ja makro edenemise värskendusi kuvatakse jätkuvalt.

Enamasti ei ole DoEvents midagi, mida soovite oma koodi palju lisada, ja selle võib sageli välja jätta. Kui teie makro vajab siiski reageerimisvõimet, ärge seda välja lugege!

Te aitate arengu ala, jagades leht oma sõpradega

wave wave wave wave wave