DoBA dogodki VBA

Kazalo

VBA DoEvents funkcija začasno zaustavi delujoči makro, kar Excelu daje možnost, da obdeluje pritiske tipk, klike miške in druga sporočila operacijskega sistema.

V dolgotrajnih makrih se lahko zdi, da Excel visi in se ne odziva, makra pa je nemogoče prekiniti. Če so DoEvents vključeni v vašo kodo, so uporabniki lahko prepričani, da makro še vedno deluje, in lahko po potrebi še vedno prekinejo izvajanje.

Primer dogodkov VBA DoEvents

Upoštevajte naslednjo kodo:

1234567891011 Javni pod test ()Dim i As LongZa i = 1 do 20000Razpon (“A1”). Vrednost = iNaprej iEnd Sub

Ko poskusite s to kodo, boste opazili, da z oknom Excel ni mogoče komunicirati. Ker pa procesor ni zelo zahteven, lahko makro še vedno prekinete s pritiskom na ESC ali CTRL+BREAK.

Če bi se v tej zanki izvajalo veliko zapletenih in zahtevnih funkcij, bi Excel potreboval več časa za registracijo dogodka pritiska na tipko - do nekaj minut ali morda sploh ne, še posebej, če računalnik hkrati izvaja druge programe.

Zdaj dodajte eno vrstico z DoEvents pod dodelitvijo obsega:

123 Razpon ("A1"). Vrednost = iDoEvents

Če znova zaženete to kodo, boste videli, da je Excel zdaj odziven - ga je mogoče osredotočiti in postaviti v ospredje. DoEvents se vsakokrat pokliče skozi zanko, kar zagotavlja, da makro vedno prinaša izvedbo, tako da lahko Excel obdeluje vsa sporočila, ki so mu poslana. Ker se ta makro hitro izvaja, se skoraj zdi, kot da deluje v ozadju (čeprav ni) - več operacij v zanki bi to iluzijo hitro razkrilo.

DoEvents Nevarnosti

Pa poglej še enkrat. Več kot preprosto dovolite, da se Excel osredotoči, lahko dejansko kliknete v celicah in celo preklapljate zavihke med izvajanjem makra (poskusite - videli boste smešno vedenje). To kaže na eno od nevarnosti DoEvents - lahko povzroči nenamerne posledice, če vaš makro ni skrbno kodiran.

Druga nevarnost je, da lahko DoEvents služi kot okno za izvajanje drugih makrov. Poskusite to: postavite ukazni gumb ActiveX na delovni list, ga dvokliknite in dodajte naslednjo kodo v dogodek CommandButton1_Click ():

1234567 Zatemni c kot obsegZa vsak c v dosegu ("B3: E8")c.Vrednost = c.Vrednost + 1Naprej c

V Excelu izklopite način oblikovanja in zaženite makro Test (), ki ste ga dodali prej. Med izvajanjem makra Test lahko na delovnem listu kliknete gumb CommandButton in z njim povezani makro se zažene takoj, ko DoEvents da makroju Test () premor.

Tu je nevarnost, če makro CommandButton spremeni podatke, na katerih je delal makro Test (), ali znova sproži makro Test (). Če niste previdni, lahko dobite nekaj zelo grdih rezultatov.

Nazadnje se morate zavedati, da bodo DoEvents pri klicu povzročili vpliv na zmogljivost vašega makra. Znotraj zanke se bo ta učinek hitro povečal, razen če omejite, kako pogosto se kliče DoEvents. V našem primeru Test () poskusite to:

1 Če je i Mod 1000 = 0, naredite DoEvents

To vidno zmanjšuje odzivnost Excela, vendar bo vpliv na zmogljivost manjši.

Kdaj uporabiti DoEvents

Kljub tem nevarnostim je DoEvents priročna funkcija, ki pomaga pri testiranju in odpravljanju napak. Razmislite o dodajanju DoEvents v dolgotrajne zanke.

Drug razlog za vključitev DoEvents je omogočanje povratnih informacij uporabnikov. Na primer, makro lahko posodobi oznake uporabniškega obrazca z indikatorji napredka. Brez DoEvents Excel morda ne bo prejel sporočil za ponovno barvanje uporabniškega obrazca, kar daje uporabniku vtis, da je makro prenehal delovati - še posebej, če preklopite na drug program in nato poskusite preklopiti nazaj na Excel. Z DoEvents pa se bo uporabniški obrazec še naprej prebarval in še naprej bodo prikazane posodobitve napredka makra.

DoEvents večinoma ni nekaj, kar bi želeli veliko vključiti v svojo kodo, in se pogosto lahko izpusti. Če makro potrebuje odzivnost, tega ne upoštevajte!

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave