ВБА ДоЕвентс

Преглед садржаја

ВБА ДоЕвентс функција привремено паузира покренути макро, дајући Екцел -у прилику да обради притиске тастера, кликове мишем и друге поруке оперативног система.

У дуготрајним макроима може се чинити да Екцел виси и да не реагира, а макро је немогуће прекинути. Ако су ДоЕвентс укључени у ваш код, корисници могу бити уверени да је макро још увек активан и по потреби могу прекинути извршавање.

Пример ВБА ДоЕвентс

Узмите у обзир следећи код:

1234567891011 Јавни под тест ()Дим и Ас ЛонгЗа и = 1 до 20000Опсег („А1“). Вредност = иЗатим самЕнд Суб

Када испробате овај код, приметићете да се са Екцел прозором не може комуницирати. Међутим, пошто процесор није захтеван, макро се и даље може прекинути притиском на ЕСЦ или ЦТРЛ+БРЕАК.

Да се ​​у овој петљи извршава много сложених и захтјевних функција, Екцелу би требало дуже да регистрира кључни догађај - до неколико минута или можда уопће не, поготово ако рачунар истовремено покреће друге програме.

Сада додајте један ред са ДоЕвентс испод додељивања опсега:

123 Опсег ("А1"). Вредност = иДоЕвентс

Ако поново покренете овај код, видећете да Екцел сада реагује - може се фокусирати и ставити у први план. ДоЕвентс се позива сваки пут кроз петљу, што осигурава да макро увек даје извршење, тако да Екцел може да обради све поруке које су му послате. Будући да овај макро ради брзо, готово се чини да ради у позадини (иако није) - више операција унутар петље брзо би разоткрило ту илузију.

ДоЕвентс Дангерс

Ипак, погледајте још једном. Више од једноставног допуштања Екцел -у да буде фокусиран, можете заправо кликнути унутар ћелија, па чак и мењати картице док је макро покренут (пробајте - видећете смешно понашање). Ово показује једну од опасности ДоЕвентс -а - може бити узрок нежељених последица ако ваш макро није пажљиво кодиран.

Друга опасност је да ДоЕвентс може послужити као прозор за покретање других макроа. Покушајте ово: поставите АцтивеКс ЦоммандБуттон на радни лист, двапут кликните на њега и додајте следећи код унутар догађаја ЦоммандБуттон1_Цлицк ():

1234567 Дим ц Ас РангеЗа сваки ц у опсегу ("Б3: Е8")ц.Вредност = ц.Вредност + 1Следеће ц

Искључите режим дизајна у програму Екцел, а затим покрените макро Тест () који сте додали раније. Док је тестни макро покренут, можете кликнути ЦоммандБуттон на радном листу, а повезани макро ће се покренути чим ДоЕвентс макроу Тест () преда паузу.

Опасност овде представља ако је макро ЦоммандБуттон променио податке на којима је макро Тест () радио, или је поново покренуо тест (). Можете бити крајње неуредни ако не будете пажљиви.

Коначно, требали бисте бити свјесни да ће ДоЕвентс узроковати да ваш макро утиче на перформансе када се позове. Унутар петље, овај утицај ће се брзо повећати ако не ограничите учесталост позивања ДоЕвентс -а. Позивајући се на наш пример Тест (), покушајте ово:

1 Ако је и Мод 1000 = 0, онда ДоЕвентс

Ово видљиво смањује Екцел -ов одзив, али ће утицај на перформансе бити смањен.

Када користити ДоЕвентс

Упркос овим опасностима, ДоЕвентс је згодна функција која помаже у тестирању и отклањању грешака. Размислите о додавању ДоЕвентс-а у дуготрајне петље.

Још један разлог за укључивање ДоЕвентс -а је омогућавање повратних информација корисника. На пример, макро може ажурирати ознаке УсерФорм -а индикаторима напретка. Без ДоЕвентс -а, Екцел можда неће примити поруке за поновно бојење УсерФорм -а, остављајући кориснику утисак да је макро престао да ради - посебно ако се пребаците на други програм, а затим покушате да се вратите на Екцел. Уз ДоЕвентс, УсерФорм ће се и даље префарбавати, а ажурирања напретка макроа ће се и даље појављивати.

Углавном, ДоЕвентс није нешто што желите да укључите много у свој код и често се може изоставити. Ако је вашем макроу потребно одзив, немојте то рачунати!

Ви ће помоћи развој сајта, дељење страницу са пријатељима

wave wave wave wave wave