Excel 2016 VBA programmeerimises saate kasutada kahte tüüpi sündmusi, mis pole objektidega seotud: aeg ja klahvivajutused. Kuna aeg ja klahvivajutused ei ole seotud konkreetse objektiga, näiteks töövihiku või töölehega, programmeerite need sündmused tavalises VBA-moodulis.
OnTime sündmus
Sündmus OnTime toimub siis, kui ilmneb konkreetne kellaaeg. Järgmine näide näitab, kuidas panna Excel toimingut käivitama, kui toimub kell 15.00 sündmus. Sel juhul käseb roboti hääl ärgata koos sõnumikastiga:
Sub SetAlarm()
Application.OnTime 0.625, "DisplayAlarm"
Lõpeta alam
Sub DisplayAlarm()
Application.Speech.Speak ("Hei, ärka üles")
MsgBox "On aeg teie pärastlõunaseks puhkuseks!"
Lõpeta alam
Selles näites kasutatakse rakenduse objekti meetodit OnTime. Sellel meetodil on kaks argumenti: aeg (0,625 või 15:00) ja ajasündmuse toimumisel käivitatava alamprotseduuri nimi (DisplayAlarm).
See protseduur on üsna kasulik, kui kipute oma töösse nii sisse keerama, et unustate koosolekud ja kohtumised. Seadistage lihtsalt meeldetuletuseks OnTime sündmus.
Enamikul inimestel on Exceli nummerdamissüsteemis raske aega mõelda. Seetõttu võiksite aja esitamiseks kasutada funktsiooni VBA TimeValue. TimeValue teisendab stringi, mis näeb välja nagu aeg, väärtuseks, mida Excel saab käsitleda. Järgmine avaldus näitab lihtsamat viisi sündmuse programmeerimiseks kella 15-ks:
Application.OnTime TimeValue ("15:00:00"), "DisplayAlarm"
Kui soovite ajastada sündmuse praeguse aja suhtes (näiteks 20 minuti pärast), võite kasutada järgmist avaldust:
Application.OnTime Now + TimeValue("00:20:00"), "DisplayAlarm"
OnTime meetodit saate kasutada ka VBA-protseduuri käivitamiseks konkreetsel päeval. Peate veenduma, et teie arvuti töötab jätkuvalt ja protseduuriga töövihik on avatud. Järgmine avaldus käivitab DisplayAlarmi protseduuri 31. detsembril 2016 kell 17:00:
Application.OnTime DateValue ("31.12.2016 17:00"), "DisplayAlarm"
See konkreetne koodirida võib olla kasulik hoiatades teid, et peate koju minema ja valmistuma aastavahetuse pidustusteks.
Siin on veel üks näide, mis kasutab OnTime sündmust. UpdateClocki protseduuride täitmine kirjutab aja lahtrisse A1 ja programmeerib viis sekundit hiljem ka teise sündmuse. See sündmus käivitab uuesti UpdateClocki protseduuri. Netoefekt on see, et lahtrit A1 värskendatakse praeguse kellaajaga iga viie sekundi järel. Sündmuste peatamiseks käivitage protseduur StopClock (mis tühistab sündmuse). Pange tähele, et NextTick on moodulitaseme muutuja, mis salvestab järgmise sündmuse aja.
Dim NextTick As Date
Alam UpdateClock()
Värskendab lahtrit A1 praeguse kellaajaga
ThisWorkbook.Sheets(1).Range(“A1”) = aeg
Seadistage järgmine sündmus viie sekundi pärast
NextTick = Praegu + TimeValue ("00:00:05")
Application.OnTime NextTick, "UpdateClock"
Lõpeta alam
Sub StopClock()
' Tühistab OnTime sündmuse (peatab kella)
Vea korral Jätka järgmisena
Application.OnTime NextTick, "UpdateClock", , False
Lõpeta alam
Sündmus OnTime püsib ka pärast töövihiku sulgemist. Teisisõnu, kui sulgete töövihiku ilma StopClocki protseduuri käivitamata, avaneb töövihik viie sekundi pärast uuesti (eeldusel, et Excel töötab endiselt). Selle vältimiseks kasutage sündmuse protseduuri Workbook_BeforeClose, mis sisaldab järgmist avaldust:
Helista StopClockile
OnTime meetodil on kaks täiendavat argumenti. Kui kavatsete seda meetodit kasutada, vaadake täielikke üksikasju spikrisüsteemist.
Kui soovite näha mõnda üsna keerulist rakendust, vaadake seda analoogkella rakendust. Kella sihver on tegelikult diagramm ja diagrammi uuendatakse iga sekundi järel, et kuvada kellaaeg. Kasutu, aga lõbus.

Analoogkella rakendus.
Klahvivajutuse sündmused
Töötamise ajal jälgib Excel pidevalt, mida sisestate. Seetõttu saate seadistada nii, et klahvivajutus või klahvikombinatsioon käivitab protseduuri.
Siin on näide, mis määrab PgDn ja PgUp võtmed ümber:
Alamseadistus_OnKey()
Application.OnKey “{PgDn}”, “PgDn_Sub”
Application.OnKey "{PgUp}", "PgUp_Sub"
Lõpeta alam
Sub PgDn_Sub()
Vea korral Jätka järgmisena
ActiveCell.Offset(1, 0).Aktiveeri
Lõpeta alam
Sub PgUp_Sub()
Vea korral Jätka järgmisena
ActiveCell.Offset(-1, 0).Aktiveeri
Lõpeta alam
Pärast OnKey sündmuste seadistamist protseduuri Setup_OnKey abil liigutab PgDn vajutamine teid ühe rea võrra allapoole. PgUp vajutamine viib teid ühe rea võrra ülespoole.
Pange tähele, et võtmekoodid on sulgudes, mitte sulgudes. Klaviatuurikoodide täieliku loendi leiate abisüsteemist. Otsige OnKey.
Selles näites kasutatakse suvandit On Error Resume Next, et ignoreerida genereeritud tõrkeid. Näiteks kui aktiivne lahter asub esimeses reas, põhjustab ühe rea võrra ülespoole liikumise katse tõrke, mida saab ohutult ignoreerida. Ja kui diagrammileht on aktiivne, pole aktiivset lahtrit.
Järgmist rutiini käivitades tühistate OnKey sündmused:
Sub Cancel_OnKey()
Application.OnKey “{PgDn}”
Application.OnKey “{PgUp}”
Lõpeta alam
Tühja stringi kasutamine OnKey meetodi teise argumendina ei tühista OnKey sündmust. Pigem paneb Excel lihtsalt klahvivajutust ignoreerima. Näiteks järgmine lause käsib Excelil Alt+F4 ignoreerida. Protsendimärk tähistab klahvi Alt:
Application.OnKey "%{F4}", ""
Kuigi saate makro käivitamiseks kiirklahvi määramiseks kasutada meetodit OnKey, peaksite selle ülesande jaoks kasutama dialoogiboksi Makro suvandid.
Kui sulgete koodi sisaldava töövihiku ja jätate Exceli avatuks, siis OnKey meetodit ei lähtestata. Selle tulemusena avab Excel kiirklahvi vajutamisel faili automaatselt makroga. Selle vältimiseks lisage kood oma Workbook_BeforeClose sündmuse koodile, et OnKey sündmus lähtestada.