Рад са Екцел ВБА макроима
Макрои у Екцелу се чувају као ВБА код, а понекад ћете желети да уредите овај код директно. Овај водич ће покрити како прегледати и уредити макрое, описати неке технике отклањања грешака у макроима и дати неке уобичајене примере уређивања.
Приказ макроа
Листа макроа може се приказати у дијалогу Макрои. Да бисте видели овај дијалог, изаберите картицу Девелопер на траци и кликните на дугме Мацрос.
Ако је отворено више радних свески, на листи ће се приказати макрои из свих радних свезака. Макрои у активној радној свесци ће се појавити само по имену, док ће макрои у другим радним свескама имати префикс имена радне свеске и ускличника (тј. „Књига2! Остали макро“).
Отворите макро за уређивање
Можете користити дијалог Макро да бисте отворили код за макро одабиром имена макроа и кликом на дугме Уреди. Ово ће отворити макро у ВБ Едитор -у.
Алтернативно, можете отворити ВБ Едитор директно кликом на дугме Висуал Басиц на картици Девелопер или притиском на тастерску пречицу АЛТ+Ф11.
Користећи ову методу, мораћете да дођете до жељеног макроа (који се назива и „процедура“). Прећи ћемо на изглед ВБА Едитор -а:
Преглед ВБ Едитор -а
ВБ Едитор има неколико прозора; у овом водичу ћемо покрити Пројецт Виндов, Пропертиес прозор и Цоде Виндов.
Пројецт Виндов
Прозор пројекта приказује сваку Екцел датотеку као свој пројекат, са свим објектима у том пројекту категорисаним по типу. Снимљени макрои ће се појавити у категорији „Модули“, обично у објекту „Модул1“. (Ако ваш пројекат има више модула и нисте сигурни где је ускладиштен ваш макро, једноставно га отворите из горе поменутог дијалога Макрои.)
Прозор својстава
Прозор Својства приказује својства и придружене вредности објекта - на пример, кликом на објекат радног листа у прозору пројекта приказаће се листа својстава радног листа. Називи својстава су са леве стране, а вредности својстава са десне стране.
Одабиром модула у прозору Пројецт показаће се да има само једно својство, „(Наме)“. Можете променити назив модула тако што ћете двапут кликнути на вредност својства, унети ново име и притиснути Ентер. Промена назива модула ће га преименовати у Пројецт Виндов, што је корисно ако имате много модула.
Кодови прозора
Прозори кодова су посебни уређивачи текста у којима можете уредити ВБА код макроа. Ако желите да видите код за макро који се налази у Модулу 1, двапут ћете кликнути на „Модул 1“ у прозору пројекта.
Покретање макроа у ВБ Едитор -у
Макрои се могу покренути директно из ВБ Едитор -а, што је корисно за тестирање и отклањање грешака.
Покретање макроа
- У прозору пројекта двапут кликните на модул који садржи макро који желите да тестирате (да бисте отворили прозор са кодом)
- У прозору кода поставите курсор било где на коду макроа између „Суб“ и „Енд Суб“
- Кликните Трцати дугме на траци са алаткама или притисните тастерску пречицу Ф5
„Корак“ кроз макро
Уместо да покрећете макро одједном, можете покренути макро по један ред, користећи пречицу на тастатури за „пролаз“ кроз код. Макро ће се паузирати у сваком реду, омогућавајући вам да сваки ред кода уради оно што очекујете у Екцелу. Такође можете зауставити наставак макроа у било ком тренутку помоћу ове методе.
Да бисте „прешли“ кроз макро:
- У прозору пројекта двапут кликните на модул који садржи макро који желите да тестирате (да бисте отворили прозор са кодом)
- У прозору кода поставите курсор било где на коду макроа
- Притисните тастерску пречицу Ф8 да бисте започели процес „корака“
- Притискајте Ф8 да бисте унапредили извршење кода, што је означено жутом ознаком у прозору Цоде
- Да бисте зауставили наставак макроа, притисните Ресетовање дугме
Зашто уређивати ВБА макрое?
Макро снимач - иако ефикасан - такође је веома ограничен. У неким случајевима производи споре макрое, бележи радње које нисте намеравали да поновите или бележи ствари за које нисте мислили да радите. Учење уређивања ваших макроа помоћи ће им да трче брже, ефикасније и предвидљивије.
Осим што ћете решити те проблеме, добићете и масовно повећање продуктивности када искористите сву моћ макроа. Макрои не морају само да буду снимци задатака - макрои могу укључивати логику тако да обављају задатке само под одређеним условима. За само неколико минута можете кодирати петље које понављају задатак стотинама или хиљадама пута одједном!
У наставку ћете пронаћи неке корисне савете који ће вам помоћи да оптимизујете свој макро код, као и алате за побољшање рада макроа и паметније.
Уобичајени примери уређивања макроа
Убрзајте макрое
Ако имате макро за чије је покретање потребно много времена, можда постоји неколико разлога зашто се споро покреће.
Као прво: када се покрене макро, Екцел ће приказати све како се дешава у реалном времену - док може погледај брзо за вас, заправопоказујући дело је значајан хит перформанса. Један од начина да учините да Екцел ради знатно брже је да му то кажете престаните да ажурирате екран:
'Дисабле Сцреен Упдатинг Апплицатион.СцреенУпдатинг = Фалсе' Омогући ажурирање екрана Апплицатион.СцреенУпдатинг = Труе
Ред „Апплицатион.СцреенУпдатинг = Фалсе“ значи да нећете видети да макро ради, али ће се покренути много брже. Имајте на уму да на крају макроа увек треба да поставите СцреенУпдатинг на Труе, иначе се Екцел можда неће понашати онако како сте очекивали касније!
Још један начин да убрзате макрое:искључите аутоматско израчунавање у макроу. Ако сте радили са сложеним табелама, знаћете да мале промене могу покренути хиљаде прорачуна којима је потребно време да се заврше, због чега многи искључују аутоматско израчунавање у Екцел-овим опцијама. Ово такође можете да пребаците помоћу ВБА кода, тако да ће ваш макро и даље брзо радити на другим рачунарима. Ово помаже у случајевима када копирате много ћелија формуле или узрокујете да се покреће много прорачуна док лепите податке у опсег:
'Онемогући апликацију за аутоматско израчунавање.Цалцулатион = клЦалцулатионМануал' Омогући апликацију за аутоматско израчунавање.Цалцулатион = клЦалцулатионАутоматиц
Додавање петљи и логике (ако изјаве)
Макро снимач чува све ваше радње као код на језику који се зове ВБА. ВБА није само начин снимања радњи у Екцелу - то је програмски језик, што значи да може да садржи код за доношење одлука о радњама које треба извршити или понављање радњи док се не испуни услов.
Петље
Рецимо да сте хтели да направите макро који је припремио извештај, а као део тог макроа морали сте да додате деветнаест листова у радну свеску, укупно двадесет. Могли бисте се снимити кликом на (+) дугме изнова или изнова, или можете написати петљу која за вас понавља радњу, на следећи начин:
Суб РепортПреп () Дим и Ас Лонг Фор и = 1 То 19 Схеетс.Адд Нект и Енд Суб
У овом примеру користимо а Фор лооп, што је нека врста петље која се понавља кроз низ ставки. Овде је наш опсег бројеви од 1 до 19, користећи променљиву под називом „и“, тако да петља може да прати. Унутар наше петље, само једна радња се понавља између за иследећи редова (додавање листа), али можете додати онолико кода унутар петље колико желите да урадите ствари попут форматирања листа или копирања и лепљења података на сваки лист - шта год желите да поновите.
Ако Изјаве
Ан Ако изјава користи се за одлучивање да ли се неки код покреће или не, користећи логички тест за доношење одлуке. Ево једноставног примера:
Суб ЦлеарИфСмалл () Иф Селецтион.Валуе <100 Тхен Селецтион.Цлеар Енд Иф Енд Суб
Овај једноставан пример показује како исказ Иф функционише - тестирате неки услов који је или Тачан или Нетачан (да ли је вредност изабране ћелије мања од 100?), а ако тест врати Труе, код се покреће.
Недостатак овог кода је што тестира само једну ћелију одједном (и неће успети ако изаберете више ћелија). Ово би било корисније ако бисте могли … проћи кроз сваку одабрану ћелију и тестирати сваку …
Суб ЦлеарИфСмалл () Дим ц Ас Ранге фор еацх ц Ин Селецтион.Целлс Иф ц.Валуе <100 тхен ц.Цлеар Енд Иф Нект ц Енд Суб
У овом примеру постоји нешто другачија петља Фор - ова не кружи низом бројева, већ се петља кроз све ћелије у избору, користећи променљиву под називом „ц“ за праћење. Унутар петље, вредност „ц“ се користи за одређивање да ли ћелију треба обрисати или не.
Петље и Иф наредбе се могу комбиновати на било који начин - петље можете ставити унутар петљи, или један Иф у другу, или користити Иф да одлучите да ли би петља уопште требало да се покрене.
<<>>
Уклоните ефекте померања
Уобичајени разлог за уређивање кода макроа је уклањање померања екрана. Приликом снимања макроа, можда ћете морати да дођете до других делова радног листа померањем, али макрои не морају да се померају да би приступили подацима.
Померање може да затрпа ваш код стотинама или чак хиљадама редова непотребног кода. Ево примера кода који се снима када кликнете и превучете траку за померање:
Ова врста кода је потпуно непотребна и може се избрисати без утицаја на било коју другу функционалност. Чак и ако желите да задржите помицање, овај код би и даље могао бити сажет у петљу.
Уклоните сувишни код
Снимљени макрои обично додају много сувишног кода који не одражава нужно оно што желите да макро ради. Узмите на пример следећи снимљени код који бележи промену назива фонта у ћелији:
Иако је само назив фонта промењен, забележено је једанаест (11) промена фонта, попут величине фонта, текстуалних ефеката итд. Ако је намера макроа била само да промени назив фонта (остављајући сва остала својства на миру), снимљени макро не би радио!
Могуће је променити овај макро тако да мења само назив фонта:
Не само да ће овај макро сада радити како је предвиђено, већ га је и много лакше читати.
Уклоните кретања курсора
Још једна ствар која се бележи у макроима су одабир радног листа и ћелија. Ово је проблем јер корисник може лако изгубити траг на ономе на чему је управо радио ако се курсор помакне на другу позицију након покретања макронаредбе.
Као и код скроловања, ти можда ће морати да помери курсор и изабере различите ћелије за извршавање задатка, али макрои не морају да користе курсор за приступ подацима. Размотрите следећи код који копира опсег и затим га залепи у три друга листа:
Постоји неколико проблема са овим кодом:
- Корисник ће изгубити своје претходно место у радној свесци
- Макро не одређује који лист копирамофром - ово би могао бити проблем ако је макро покренут на погрешном листу
Осим тога, код је тешко читати и расипати. Ова питања се могу лако решити:
У овом коду је јасно видети да копирамо са Схеет1 и да ни активни радни лист ни изабрани опсег не морају да се мењају да би се залепили подаци. (Једна значајна промена је употреба „ПастеСпециал“ уместо „Пасте“ - Објекти опсега, попут „Ранге („ Ц4 ″) “), имају приступ само команди ПастеСпециал.)
Кад год код постане пун референци на „.Селецт“ и „Селецтион“, то значи да постоји простор за оптимизацију тог кода и његову ефикасност.
