Ако покушавате да добро разумете Екцел ВБА , вероватно би вам могло користити неколико примера да бисте развили то визуелно основно умеће. Овде ћете пронаћи неколико примера Екцел ВБА како бисте могли да се упознате са овим послом управљања догађајима.
Пример Екцел ВБА: догађај Опен за радну свеску
Један од најчешће коришћених Екцел ВБА догађаја је догађај Опенбоок Воркбоок. Претпоставимо да имате радну свеску коју користите сваки дан. Процедура Воркбоок_Опен у овом примеру се извршава сваки пут када се радна свеска отвори. Поступак проверава дан у недељи; ако је петак, код приказује поруку подсетника за вас.
Да бисте креирали Екцел ВБА процедуру која се извршава сваки пут када дође до догађаја отварања радне свеске, следите ове кораке:
Отворите Екцел радну свеску.
Било која Екцел радна свеска ће бити довољна.
Притисните Алт+Ф11 да активирате ВБЕ.
Пронађите радну свеску у прозору пројекта.
Двапут кликните на име пројекта да бисте приказали његове ставке, ако је потребно.
Двапут кликните на ставку ТхисВоркбоок.
ВБЕ приказује празан прозор кода за објекат ТхисВоркбоок.
У прозору кода изаберите Радна свеска са падајуће листе Објекат (лево).
ВБЕ уноси почетне и завршне изразе за Воркбоок_Опен процедуру.
Унесите следеће изјаве, тако да комплетна процедура догађаја изгледа овако:
Приватна под Радна свеска_Опен()
Пригуши поруку као стринг
Ако је дан у недељи (сада) = 6 Онда
Мсг = "Данас је петак. Не заборавите да "
Порука = Порука & "пошаљи ТПС извештај!"
МсгБок Мсг
Крај Ако
Енд Суб
Прозор кода би требао изгледати овако.

Ова процедура за руковање догађајима се извршава када се отвори радна свеска.
Воркбоок_Опен се извршава аутоматски сваки пут када се радна свеска отвори. Користи ВБА функцију ВеекДаи за одређивање дана у недељи. Ако је петак (6. дан), оквир са поруком подсећа корисника да поднесе извештај. Ако није петак, ништа се неће десити.
Ако данас није петак, можда ће вам бити тешко да тестирате ову процедуру. Можете само да промените 6 тако да одговара данашњем стварном броју дана.
И наравно, ову процедуру можете модификовати на било који начин. На пример, следећа верзија приказује поруку сваки пут када се радна свеска отвори. Ово постаје досадно након неког времена.
Воркбоок_Опен процедура може да уради скоро све. Ови обрађивачи догађаја се често користе за следеће:
- Приказ порука добродошлице (као што је у Франковој цоол радној свесци)
- Отварање других радних свеска
- Активирање одређеног радног листа у радној свесци
- Подешавање прилагођених пречица
Ево коначног Екцел ВБА примера Воркбоок_Опен процедуре која користи функције ГетСеттинг и СавеСеттинг да би пратила колико пута је радна свеска отворена. Функција СавеСеттинг уписује вредност у Виндовс регистратор, а функција ГетСеттинг преузима ту вредност (погледајте систем помоћи за детаље). Следећи пример Екцел ВБА преузима број из регистра, повећава га, а затим га чува назад у регистратор. Такође говори кориснику вредност Цнт која одговара броју отварања радне свеске.
Приватна под Радна свеска_Опен()
Дим Цнт Ас Лонг
Цнт = ГетСеттинг("МиАпп", "Сеттингс", "Опен", 0)
Цнт = Цнт + 1
СавеСеттинг "МиАпп", "Сеттингс", "Опен", Цнт
МсгБок "Ова радна свеска је отварана " & Цнт & " пута."
Енд Суб

Коришћење руковаоца догађаја Воркбоок_Опен за праћење колико пута је радна свеска отворена.
Пример Екцел ВБА: догађај БефореЦлосе за радну свеску
Ево примера процедуре за руковање догађајима Екцел ВБА Воркбоок_БефореЦлосе, која се аутоматски извршава непосредно пре затварања радне свеске. Ова процедура се налази у прозору Цоде за објекат ТхисВоркбоок:
Приватна под радна свеска_БефореЦлосе(Откажи као Боолеан)
Пригуши поруку као стринг
Дим Анс Ас Лонг
Дим ФНаме као стринг
Мсг = "Да ли желите да направите резервну копију ове датотеке?"
Анс = МсгБок(Мсг, вбИесНо)
Ако је Анс = вбИес Онда
ФНаме = "Ф:\БАЦКУП\" & ТхисВоркбоок.Наме
ТхисВоркбоок.СавеЦопиАс ФНаме
Крај Ако
Енд Суб
Ова рутина користи оквир за поруке да пита корисника да ли жели да направи резервну копију радне свеске. Ако је одговор да, код користи методу СавеЦопиАс да сачува резервну копију датотеке на диску Ф. Ако прилагодите ову процедуру за сопствену употребу, потребно је да промените диск јединицу и путању.
Екцел програмери често користе процедуру Воркбоок_БефореЦлосе да би почистили за собом. На пример, ако користите процедуру Воркбоок_Опен да промените нека подешавања када отворите радну свеску (на пример, сакријете статусну траку), једино је прикладно да вратите подешавања у првобитно стање када затворите радну свеску. Можете обавити ово електронско одржавање домаћинства помоћу процедуре Воркбоок_БефореЦлосе.
Када користите догађај Воркбоок_БефореЦлосе, имајте ово на уму: Ако затворите Екцел и било која отворена датотека је промењена од последњег чувања, Екцел приказује свој уобичајени оквир са поруком „Да ли желите да сачувате своје промене“. Кликом на дугме Откажи поништава се цео процес затварања. Али догађај Воркбоок_БефореЦлосе ће ионако бити извршен.
Пример Екцел ВБА: Догађај БефореСаве за радну свеску
Догађај БефореСаве, као што му име говори, покреће се пре него што се радна свеска сачува. Овај догађај се дешава када изаберете Датотека → Сачувај или Датотека → Сачувај као.
Следећа процедура, која се налази у прозору Цоде за објекат ТхисВоркбоок, демонстрира догађај ПреСаве. Рутина ажурира вредност у ћелији (ћелија А1 на Схеет1) сваки пут када се радна свеска сачува. Другим речима, ћелија А1 служи као бројач који прати колико је пута датотека сачувана.
Приватна под Радна свеска_БефореСаве(БиВал СавеАсУИ _
Као Боолеан, Цанцел Ас Боолеан)
Дим Цоунтер Ас Ранге
Постави бројач = листови("Схеет1").Распон("А1")
Цоунтер.Валуе = Цоунтер.Валуе + 1
Енд Суб
Приметите да процедура Воркбоок_БефореСаве има два аргумента: СавеАсУИ и Цанцел. Да бисте показали како ови аргументи функционишу, испитајте следећи макро, који се извршава пре него што се радна свеска сачува. Ова процедура покушава да спречи корисника да сачува радну свеску под другим именом. Ако корисник одабере Филе → Саве Ас, аргумент СавеАсУИ је Тачан.
Када се код изврши, он проверава вредност СавеАсУИ. Ако је ова променљива Тачна, процедура приказује поруку и поставља Цанцел на Тачно, чиме се отказује операција Саве.
Приватна под Радна свеска_БефореСаве(БиВал СавеАсУИ _
Као Боолеан, Цанцел Ас Боолеан)
Ако СавеАсУИ Онда
МсгБок "Не можете да сачувате копију ове радне свеске!"
Откажи = Тачно
Крај Ако
Енд Суб
Имајте на уму да ова процедура неће спречити никога да сачува копију са другим именом. Ако неко заиста жели то да уради, може једноставно да отвори радну свеску са онемогућеним макроима. Када су макрои онемогућени, процедуре за руковање догађајима су такође онемогућене, што има смисла јер су, на крају крајева, макрои.