V programovaní VBA pre Excel 2016 môžete použiť dva typy udalostí, ktoré nie sú spojené s objektmi: čas a stlačenie klávesov. Pretože čas a stlačenie kláves nie sú spojené s konkrétnym objektom, ako je zošit alebo pracovný hárok, naprogramujete tieto udalosti v bežnom module VBA.
Udalosť OnTime
Udalosť OnTime nastane, keď nastane konkrétny čas dňa. Nasledujúci príklad ukazuje, ako prinútiť Excel, aby vykonal procedúru, keď nastane udalosť o 15:00. V tomto prípade vám hlas robota povie, aby ste sa zobudili, spolu so správou:
Sub SetAlarm()
Application.OnTime 0,625, „DisplayAlarm“
End Sub
Sub DisplayAlarm()
Application.Speech.Speak („Hej, zobuď sa“)
MsgBox "Je čas na popoludňajšiu prestávku!"
End Sub
V tomto príklade je použitá metóda OnTime objektu Application. Táto metóda má dva argumenty: čas (0,625 alebo 15:00) a názov procedúry Sub, ktorá sa má vykonať, keď nastane časová udalosť (DisplayAlarm).
Tento postup je celkom užitočný, ak máte tendenciu sa tak zamotať do práce, že zabudnete na stretnutia a stretnutia. Stačí nastaviť udalosť OnTime, ktorá sa vám pripomenie.
Pre väčšinu ľudí je ťažké uvažovať o čase z hľadiska systému číslovania v Exceli. Preto možno budete chcieť použiť funkciu VBA TimeValue na zobrazenie času. TimeValue skonvertuje reťazec, ktorý vyzerá ako čas, na hodnotu, ktorú Excel dokáže spracovať. Nasledujúce vyhlásenie ukazuje jednoduchší spôsob, ako naprogramovať udalosť na 15:00:
Application.OnTime TimeValue(“15:00:00”), “DisplayAlarm”
Ak chcete naplánovať udalosť vzhľadom na aktuálny čas (napríklad o 20 minút odteraz), môžete použiť príkaz, ako je tento:
Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”
Na spustenie procedúry VBA v určitý deň môžete použiť aj metódu OnTime. Musíte sa uistiť, že váš počítač zostane spustený a že zošit s procedúrou zostane otvorený. Nasledujúce vyhlásenie spustí procedúru DisplayAlarm o 17:00 dňa 31. decembra 2016:
Application.OnTime DateValue(“31.12.2016 17:00”), “DisplayAlarm”
Tento konkrétny kódový riadok sa môže hodiť, aby vás upozornil, že musíte ísť domov a pripraviť sa na silvestrovské slávnosti.
Tu je ďalší príklad, ktorý používa udalosť OnTime. Vykonaním procedúr UpdateClock sa zapíše čas do bunky A1 a tiež sa naprogramuje ďalšia udalosť o päť sekúnd neskôr. Táto udalosť znova spustí procedúru UpdateClock. Výsledkom je, že bunka A1 sa aktualizuje s aktuálnym časom každých päť sekúnd. Ak chcete zastaviť udalosti, vykonajte procedúru StopClock (ktorá zruší udalosť). Všimnite si, že NextTick je premenná na úrovni modulu, ktorá ukladá čas pre ďalšiu udalosť.
Stlmiť Ďalej Označte ako dátum
Sub UpdateClock()
' Aktualizuje bunku A1 aktuálnym časom
ThisWorkbook.Sheets(1).Rozsah(“A1”) = Čas
' O päť sekúnd nastavte ďalšiu udalosť
NextTick = Now + TimeValue(“00:00:05”)
Application.OnTime NextTick, “UpdateClock”
End Sub
Sub StopClock()
' Zruší udalosť OnTime (zastaví hodiny)
Pri chybe Pokračujte ďalej
Application.OnTime NextTick, “UpdateClock”, , False
End Sub
Udalosť OnTime pretrváva aj po zatvorení zošita. Inými slovami, ak zošit zatvoríte bez spustenia procedúry StopClock, zošit sa sám znova otvorí o päť sekúnd (za predpokladu, že Excel je stále spustený). Aby ste tomu zabránili, použite procedúru udalosti Workbook_BeforeClose, ktorá obsahuje nasledujúce vyhlásenie:
Zavolajte StopClock
Metóda OnTime má dva ďalšie argumenty. Ak plánujete použiť túto metódu, mali by ste si pozrieť systém pomoci, kde nájdete úplné podrobnosti.
Ak by ste chceli vidieť pomerne komplikovanú aplikáciu, vyskúšajte túto aplikáciu analógových hodín. Ciferník je vlastne graf a graf sa aktualizuje každú sekundu, aby zobrazoval čas dňa. Zbytočné, ale zábavné.
Aplikácia analógových hodín.
Udalosti stlačenia klávesov
Počas práce Excel neustále sleduje, čo píšete. Z tohto dôvodu môžete veci nastaviť tak, aby stlačenie klávesu alebo kombinácia kláves vykonala procedúru.
Tu je príklad, ktorý mení priradenie klávesov PgDn a PgUp:
Sub Setup_OnKey()
Application.OnKey „{PgDn}“, „PgDn_Sub“
Application.OnKey „{PgUp}“, „PgUp_Sub“
End Sub
Sub PgDn_Sub()
Pri chybe Pokračujte ďalej
ActiveCell.Offset(1, 0).Aktivovať
End Sub
Sub PgUp_Sub()
Pri chybe Pokračujte ďalej
ActiveCell.Offset(-1, 0).Aktivovať
End Sub
Po nastavení udalostí OnKey vykonaním procedúry Setup_OnKey sa stlačením PgDn presuniete o jeden riadok nižšie. Stlačením PgUp sa presuniete o jeden riadok nahor.
Všimnite si, že kódy kľúčov sú uzavreté v zátvorkách, nie v zátvorkách. Úplný zoznam kódov klávesnice nájdete v systéme pomoci. Vyhľadajte OnKey.
V tomto príklade sa funkcia On Error Resume Next používa na ignorovanie všetkých vygenerovaných chýb. Ak je napríklad aktívna bunka v prvom riadku, pokus o posun o jeden riadok nahor spôsobí chybu, ktorú možno bezpečne ignorovať. A ak je aktívny hárok s grafom, neexistuje žiadna aktívna bunka.
Vykonaním nasledujúceho postupu zrušíte udalosti OnKey:
Sub Cancel_OnKey()
Application.OnKey „{PgDn}“
Application.OnKey „{PgUp}“
End Sub
Pomocou prázdny reťazec ako druhý argument pre onkey metódy však nemožno zrušiť onkey udalosť. Skôr spôsobí, že Excel jednoducho ignoruje stlačenie klávesu. Napríklad nasledujúci príkaz hovorí Excelu, aby ignoroval Alt+F4. Znak percenta predstavuje kláves Alt:
Application.OnKey „%{F4}“, „“
Hoci môžete použiť metódu OnKey na priradenie klávesovej skratky na vykonanie makra, na túto úlohu by ste mali použiť dialógové okno Možnosti makra.
Ak zatvoríte zošit, ktorý obsahuje kód a necháte Excel otvorený, metóda OnKey sa nevynuluje. V dôsledku toho stlačenie klávesovej skratky spôsobí, že Excel automaticky otvorí súbor s makrom. Aby ste tomu zabránili, mali by ste do kódu udalosti Workbook_BeforeClose zahrnúť kód na resetovanie udalosti OnKey.