Постоје две врсте догађаја које можете да користите у ВБА програмирању за Екцел 2016 који нису повезани са објектима: време и притисак на тастере. Пошто време и притисци на тастере нису повезани са одређеним објектом као што је радна свеска или радни лист, ове догађаје програмирате у нормалном ВБА модулу.
Догађај ОнТиме
Догађај ОнТиме се јавља када наступи одређено доба дана. Следећи пример показује како да натерате Екцел да изврши процедуру када дође до догађаја у 15 часова. У овом случају, глас робота вам говори да се пробудите, праћен оквиром за поруку:
Суб СетАларм()
Апплицатион.ОнТиме 0.625, „ДисплаиАларм“
Енд Суб
Суб ДисплаиАларм()
Апплицатион.Спеецх.Спеак („Хеј, пробуди се“)
МсгБок „Време је за поподневни распуст!“
Енд Суб
У овом примеру се користи метод ОнТиме објекта Апплицатион. Овај метод узима два аргумента: време (0,625 или 15:00) и назив Суб процедуре за извршење када дође до временског догађаја (ДисплаиАларм).
Ова процедура је прилично корисна ако сте склони да се толико увучете у посао да заборавите на састанке и састанке. Само подесите догађај ОнТиме да се подсетите.
Већина људи сматра да је тешко размишљати о времену у смислу Екцел система нумерисања. Због тога ћете можда желети да користите функцију ВБА ТимеВалуе за представљање времена. ТимеВалуе конвертује стринг који изгледа као време у вредност коју Екцел може да обради. Следећа изјава показује лакши начин за програмирање догађаја за 15 часова:
Апплицатион.ОнТиме ТимеВалуе(“15:00:00 пм”), “ДисплаиАларм”
Ако желите да закажете догађај у односу на тренутно време (на пример, 20 минута од сада), можете користити изјаву попут ове:
Апплицатион.ОнТиме Нов + ТимеВалуе(“00:20:00”), “ДисплаиАларм”
Такође можете да користите метод ОнТиме да покренете ВБА процедуру одређеног дана. Морате се уверити да ваш рачунар ради и да је радна свеска са процедуром отворена. Следећа изјава покреће ДисплаиАларм процедуру у 17 часова 31. децембра 2016:
Апплицатион.ОнТиме ДатеВалуе(„31.12.2016 17:00“), „ДисплаиАларм“
Ова конкретна линија кода би вам могла бити од користи да вас упозори да морате да идете кући и спремите се за новогодишње свечаности.
Ево још једног примера који користи догађај ОнТиме. Извршавање процедура УпдатеЦлоцк уписује време у ћелију А1 и такође програмира други догађај пет секунди касније. Овај догађај поново покреће процедуру УпдатеЦлоцк. Нето ефекат је да се ћелија А1 ажурира тренутним временом сваких пет секунди. Да бисте зауставили догађаје, извршите процедуру СтопЦлоцк (која поништава догађај). Имајте на уму да је НектТицк променљива на нивоу модула која чува време за следећи догађај.
Затамните следећу ознаку као датум
Суб УпдатеЦлоцк()
' Ажурира ћелију А1 тренутним временом
ТхисВоркбоок.Схеетс(1).Ранге(“А1”) = Време
' Поставите следећи догађај за пет секунди
НектТицк = Сада + ТимеВалуе(“00:00:05”)
Апплицатион.ОнТиме НектТицк, „УпдатеЦлоцк“
Енд Суб
Суб СтопЦлоцк()
' Отказује догађај ОнТиме (зауставља сат)
У случају грешке Настави даље
Апплицатион.ОнТиме НектТицк, „УпдатеЦлоцк“, , Фалсе
Енд Суб
Догађај ОнТиме траје чак и након што се радна свеска затвори. Другим речима, ако затворите радну свеску без покретања процедуре СтопЦлоцк, радна свеска ће се поново отворити за пет секунди (под претпоставком да је Екцел још увек покренут). Да бисте ово спречили, користите процедуру догађаја Воркбоок_БефореЦлосе која садржи следећу изјаву:
Позовите СтопЦлоцк
Метод ОнТиме има два додатна аргумента. Ако планирате да користите овај метод, требало би да се обратите систему помоћи за потпуне детаље.
Ако желите да видите прилично компликовану апликацију, погледајте ову апликацију за аналогни сат. Бројач сата је заправо графикон, а графикон се ажурира сваке секунде како би приказао доба дана. Бескорисно, али забавно.
Апликација за аналогни сат.
Догађаји притиска на тастер
Док радите, Екцел стално прати шта куцате. Због тога можете да подесите ствари тако да притисак на тастер или комбинација тастера изврши процедуру.
Ево примера који поново додељује тастере ПгДн и ПгУп:
Суб Сетуп_ОнКеи()
Апплицатион.ОнКеи „{ПгДн}“, „ПгДн_Суб“
Апплицатион.ОнКеи „{ПгУп}“, „ПгУп_Суб“
Енд Суб
Суб ПгДн_Суб()
У случају грешке Настави даље
АцтивеЦелл.Оффсет(1, 0).Активирај
Енд Суб
Суб ПгУп_Суб()
У случају грешке Настави даље
АцтивеЦелл.Оффсет(-1, 0).Активирај
Енд Суб
Након подешавања ОнКеи догађаја извршавањем процедуре Сетуп_ОнКеи, притиском на ПгДн померате се за један ред надоле. Притиском на ПгУп померате се за један ред горе.
Обратите пажњу на то да су кодови тастера у заградама, а не у заградама. За комплетну листу кодова тастатуре, консултујте систем помоћи. Потражите ОнКеи.
У овом примеру, Он Еррор Ресуме Нект се користи да игнорише све грешке које се генеришу. На пример, ако је активна ћелија у првом реду, покушај да се помери за један ред навише изазива грешку која се безбедно може занемарити. А ако је лист графикона активан, нема активне ћелије.
Извршавањем следеће рутине отказујете ОнКеи догађаје:
Суб Цанцел_ОнКеи()
Апплицатион.ОнКеи „{ПгДн}“
Апплицатион.ОнКеи „{ПгУп}“
Енд Суб
Коришћење празног стринга као другог аргумента за методу ОнКеи не отказује догађај ОнКеи. Уместо тога, то узрокује да Екцел једноставно игнорише притисак на тастер. На пример, следећа изјава говори Екцел-у да игнорише Алт+Ф4. Знак процента представља тастер Алт:
Апплицатион.ОнКеи „%{Ф4}“, „“
Иако можете да користите метод ОнКеи да бисте доделили тастерску пречицу за извршавање макроа, за овај задатак би требало да користите дијалог „Опције макроа“.
Ако затворите радну свеску која садржи код и оставите Екцел отворен, метод ОнКеи неће бити ресетован. Као последица тога, притиском на пречицу ће Екцел аутоматски отворити датотеку са макроом. Да бисте спречили да се то догоди, требало би да укључите код у свој Воркбоок_БефореЦлосе код догађаја да бисте ресетовали догађај ОнКеи.