VBA DoEvents

Tartalomjegyzék

A VBA DoEvents függvény ideiglenesen leállítja a futó makrót, így az Excel lehetőséget kap a billentyűk lenyomására, az egérkattintásokra és más operációs rendszer üzenetekre.

Hosszú ideig futó makrók esetén az Excel lefagyhat, és nem reagál, és a makrót lehetetlen megszakítani. Ha a DoEvents szerepel a kódban, a felhasználók biztosak lehetnek abban, hogy a makró továbbra is fut, és szükség esetén megszakíthatják a végrehajtást.

VBA DoEvents példa

Vegye figyelembe a következő kódot:

1234567891011 Nyilvános alvizsgálat ()Dim i As LongI = 1 és 20000 közöttTartomány („A1”). Érték = iKövetkező iEnd Sub

Amikor megpróbálja ezt a kódot, észre fogja venni, hogy az Excel ablak nem használható. Mivel azonban nem túl igényes a processzorra, a makrót továbbra is meg lehet szakítani az ESC vagy a CTRL+BREAK megnyomásával.

Ha sok bonyolult és igényes funkciót hajtanak végre ezen a cikluson belül, az Excelnek hosszabb ideig tartana egy kulcsnyomás esemény regisztrálása - akár néhány percig, vagy egyáltalán nem, különösen akkor, ha a számítógép más programokat is futtat egyszerre.

Most adjon hozzá egyetlen sort a DoEvents programmal a Tartomány hozzárendelés alatt:

123 Tartomány ("A1"). Érték = iDoEvents

Ha újra futtatja ezt a kódot, látni fogja, hogy az Excel most reszponzív - fókuszálható és előtérbe állítható. A DoEvents minden alkalommal meghívásra kerül a cikluson keresztül, amely biztosítja, hogy a makró mindig végrehajtást nyújtson, így az Excel képes feldolgozni a hozzá küldött üzeneteket. Mivel ez a makró gyorsan fut, szinte úgy tűnik, mintha a háttérben futna (bár nem) - a cikluson belüli további műveletek gyorsan felfednék ezt az illúziót.

DoEvents Veszélyek

Vessen azonban egy második pillantást. Több, mint az Excel fókuszálásának engedélyezése, valójában kattinthat a cellákon belül, és akár lapokat is válthat a makró futása közben (próbálja ki - vicces viselkedést fog látni). Ez megmutatja a DoEvents egyik veszélyét - nem kívánt következményeket okozhat, ha a makróját nem gondosan kódolják.

További veszély, hogy a DoEvents ablakként szolgálhat más makrók futtatásához. Próbálja ki ezt: tegyen egy ActiveX CommandButton gombot a munkalapra, kattintson rá duplán, és adja hozzá a következő kódot a CommandButton1_Click () eseményhez:

1234567 Dim c Mint tartományMinden c tartományban ("B3: E8")c.Érték = c.Érték + 1Következő c

Kapcsolja ki a Tervezési módot az Excelben, majd futtassa a korábban hozzáadott Teszt () makrót. Amíg a teszt makró fut, rákattinthat a CommandButton a munkalapon, és a hozzá tartozó makró futni fog, amint a DoEvents szünetet ad a Test () makrónak.

A veszély itt az, ha a CommandButton makró megváltoztatta a Test () makró adatait, vagy újra elindította a Test () makrót. Rendkívül rendetlen eredményeket érhet el, ha nem vigyáz.

Végezetül tisztában kell lennie azzal, hogy a DoEvents hatására a makró teljesítménye hatással lesz a hívásra. A cikluson belül ez a hatás gyorsan összeadódik, hacsak nem korlátozza a DoEvents hívási gyakoriságát. A Test () példánkra hivatkozva próbálja meg ezt:

1 Ha i Mod 1000 = 0, akkor a DoEvents

Ez láthatóan csökkenti az Excel reagálóképességét, de a teljesítményre gyakorolt ​​hatás csökken.

Mikor kell használni a DoEvents alkalmazást

E veszélyek ellenére a DoEvents egy praktikus funkció, amely segíti a tesztelést és a hibakeresést. Fontolja meg a DoEvents hozzáadását a hosszú ideig futó hurkokhoz.

A DoEvents szerepeltetésének másik oka a felhasználói visszajelzések engedélyezése. Például egy makró frissítheti a UserForm címkéit a folyamatjelzőkkel. DoEvents nélkül előfordulhat, hogy az Excel nem fogadja a UserForm újrafestésére szolgáló üzeneteket, és azt a benyomást kelti a felhasználóban, hogy a makró leállt - különösen akkor, ha másik programra vált, majd megpróbál visszatérni az Excel programra. A DoEvents használatával azonban a UserForm továbbra is újrafestésre kerül, és a makró előrehaladásának frissítései továbbra is megjelennek.

A DoEvents többnyire nem olyan dolog, amelyet sokat szeretne belefoglalni a kódba, és gyakran kihagyható. Ha azonban a reagálásra szüksége van a makrójának, ne számítsa ki!

Segít a fejlesztés a helyszínen, megosztva az oldalt a barátaiddal

wave wave wave wave wave