VBA DoEvents

Satura rādītājs

VBA DoEvents funkcija uz laiku aptur darbināmu makro, dodot programmai Excel iespēju apstrādāt taustiņu nospiešanu, peles klikšķus un citus operētājsistēmas ziņojumus.

Ilgstoši darbotos makro var likties, ka programma Excel uzkaras un nereaģē, un makro var būt neiespējami pārtraukt. Ja DoEvents ir iekļauts jūsu kodā, lietotāji var būt pārliecināti, ka makro joprojām darbojas, un vajadzības gadījumā joprojām var pārtraukt izpildi.

VBA DoEvents piemērs

Apsveriet šādu kodu:

1234567891011 Publisks apakštests ()Dim un tik ilgiJa i = 1 līdz 20000Diapazons (“A1”). Vērtība = iTālāk iBeigu apakš

Izmēģinot šo kodu, jūs atzīmēsit, ka ar Excel logu nevar mijiedarboties. Tomēr, tā kā procesors nav ļoti prasīgs, makro joprojām var pārtraukt, nospiežot ESC vai CTRL+BREAK.

Ja šajā cilpā tiktu veiktas daudzas sarežģītas un prasīgas funkcijas, programmai Excel būtu nepieciešams ilgāks laiks, lai reģistrētu taustiņu nospiešanu - līdz pat vairākām minūtēm vai, iespējams, nemaz, it īpaši, ja datorā vienlaikus darbojas citas programmas.

Tagad pievienojiet vienu rindu ar DoEvents zem diapazona piešķiršanas:

123 Diapazons ("A1"). Vērtība = iDoEvents

Palaižot šo kodu vēlreiz, jūs redzēsit, ka programma Excel tagad ir atsaucīga - to var fokusēt un izcelt priekšplānā. DoEvents tiek izsaukts katru reizi, izmantojot cilpu, kas nodrošina, ka makro vienmēr tiek izpildīts, lai Excel varētu apstrādāt visus tam nosūtītos ziņojumus. Tā kā šis makro darbojas ātri, šķiet, ka tas darbojas fonā (lai gan tas tā nav) - vairāk darbību cilpas iekšienē ātri atklātu šo ilūziju.

DoEvents Briesmas

Tomēr paskatieties otro reizi. Vairāk nekā vienkārši ļaut programmai Excel koncentrēties, jūs faktiski varat noklikšķināt šūnu iekšienē un pat pārslēgt cilnes, kamēr darbojas makro (izmēģiniet to - jūs redzēsit kādu smieklīgu uzvedību). Tas parāda vienu no DoEvents briesmām - tas var izraisīt neparedzētas sekas, ja jūsu makro nav rūpīgi kodēts.

Vēl viena bīstamība ir tāda, ka DoEvents var kalpot kā logs, kurā var palaist citus makro. Izmēģiniet šo: ievietojiet darblapā ActiveX CommandButton pogu, veiciet dubultklikšķi uz tās un pievienojiet šādu kodu notikuma CommandButton1_Click () iekšpusē:

1234567 Dim c As DiapazonsKatram diapazonā esošajam c ("B3: E8")c. Vērtība = c. Vērtība + 1Nākamais c

Izslēdziet dizaina režīmu programmā Excel un pēc tam palaidiet iepriekš pievienoto testa () makro. Kamēr darbojas testa makro, darblapā varat noklikšķināt uz CommandButton, un ar to saistītais makro tiks palaists, tiklīdz DoEvents piešķir testa () makro pārtraukumu.

Šeit pastāv briesmas, ja CommandButton makro maina datus, ar kuriem strādāja makro Test (), vai atkal aktivizē makro Test (). Ja neesat piesardzīgs, varat iegūt ļoti netīrus rezultātus.

Visbeidzot, jums jāapzinās, ka DoEvents izsaukšanas gadījumā makro ietekmē veiktspēju. Cilpas iekšpusē šī ietekme ātri palielināsies, ja vien neierobežosiet DoEvents izsaukšanas biežumu. Atsaucoties uz mūsu Test () piemēru, izmēģiniet šo:

1 Ja i Mod 1000 = 0, tad DoEvents

Tas acīmredzami samazina Excel atsaucību, bet samazinās veiktspēja.

Kad lietot DoEvents

Neskatoties uz šīm briesmām, DoEvents ir ērta funkcija, kas palīdz testēšanā un atkļūdošanā. Apsveriet iespēju pievienot DoEvents ilgstošām cilpām.

Vēl viens iemesls DoEvents iekļaušanai ir atļaut lietotāju atsauksmes. Piemēram, makro var atjaunināt UserForm etiķetes ar progresa indikatoriem. Bez DoEvents programma Excel var nesaņemt ziņojumus, lai pārkrāsotu UserForm, radot lietotājam iespaidu, ka makro ir pārstājis darboties - it īpaši, ja pārslēdzaties uz citu programmu un pēc tam mēģināt atgriezties programmā Excel. Tomēr, izmantojot DoEvents, UserForm turpinās pārkrāsot un turpinās parādīties makro progresa atjauninājumi.

Lielākoties DoEvents nav tas, ko vēlaties daudz iekļaut savā kodā, un to bieži var izlaist. Ja jūsu makro ir nepieciešama atsaucība, neņemiet to vērā!

Jums palīdzēs attīstību vietā, daloties lapu ar draugiem

wave wave wave wave wave