V programování VBA pro Excel 2016 můžete použít dva typy událostí, které nejsou spojeny s objekty: čas a stisknutí kláves. Protože čas a stisknutí kláves nejsou spojeny s konkrétním objektem, jako je sešit nebo pracovní list, naprogramujete tyto události v normálním modulu VBA.
Událost OnTime
Událost OnTime nastane, když nastane určitá denní doba. Následující příklad ukazuje, jak přimět Excel ke spuštění procedury, když dojde k události 15:00. V tomto případě vám hlas robota řekne, abyste se probudili, doprovázený zprávou:
Sub SetAlarm()
Application.OnTime 0,625, „DisplayAlarm“
End Sub
Dílčí DisplayAlarm()
Application.Speech.Speak („Hej, probuď se“)
MsgBox "Je čas na odpolední přestávku!"
End Sub
V tomto příkladu je použita metoda OnTime objektu Application. Tato metoda používá dva argumenty: čas (0,625 nebo 15:00) a název procedury Sub, která se má spustit, když dojde k časové události (DisplayAlarm).
Tento postup je docela užitečný, pokud máte tendenci se do práce tak zamotat, že zapomínáte na schůzky a schůzky. Stačí nastavit událost OnTime, která se vám připomene.
Pro většinu lidí je obtížné uvažovat o čase z hlediska systému číslování v Excelu. Proto můžete chtít použít funkci VBA TimeValue k vyjádření času. TimeValue převede řetězec, který vypadá jako čas, na hodnotu, kterou Excel zvládne. Následující prohlášení ukazuje jednodušší způsob, jak naprogramovat událost na 15:00:
Application.OnTime TimeValue(“15:00:00”), “DisplayAlarm”
Pokud chcete naplánovat událost vzhledem k aktuálnímu času (například za 20 minut), můžete použít následující příkaz:
Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”
Ke spuštění procedury VBA v určitý den můžete také použít metodu OnTime. Musíte se ujistit, že váš počítač stále běží a že sešit s postupem zůstává otevřený. Následující prohlášení spouští proceduru DisplayAlarm v 17:00 dne 31. prosince 2016:
Application.OnTime DateValue(“31. 12. 2016 17:00”), “DisplayAlarm”
Tento konkrétní řádek kódu by se mohl hodit, aby vás upozornil, že musíte jít domů a připravit se na silvestrovské oslavy.
Zde je další příklad, který používá událost OnTime. Provedení procedur UpdateClock zapíše čas do buňky A1 a také naprogramuje další událost o pět sekund později. Tato událost znovu spustí proceduru UpdateClock. Čistým efektem je, že buňka A1 je aktualizována aktuálním časem každých pět sekund. Chcete-li zastavit události, proveďte proceduru StopClock (která zruší událost). Všimněte si, že NextTick je proměnná na úrovni modulu, která ukládá čas pro další událost.
Ztlumit Další Označte jako datum
Sub UpdateClock()
' Aktualizuje buňku A1 aktuálním časem
ThisWorkbook.Sheets(1).Rozsah(“A1”) = Čas
Nastavte další událost za pět sekund
NextTick = Now + TimeValue(“00:00:05”)
Application.OnTime NextTick, „UpdateClock“
End Sub
Sub StopClock()
' Zruší událost OnTime (zastaví hodiny)
Při chybě pokračovat dále
Application.OnTime NextTick, “UpdateClock”, , False
End Sub
Událost OnTime přetrvává i po zavření sešitu. Jinými slovy, pokud zavřete sešit bez spuštění procedury StopClock, sešit se sám znovu otevře za pět sekund (za předpokladu, že Excel stále běží). Chcete-li tomu zabránit, použijte proceduru události Workbook_BeforeClose, která obsahuje následující příkaz:
Zavolejte StopClock
Metoda OnTime má dva další argumenty. Pokud plánujete použít tuto metodu, měli byste se podívat na systém nápovědy, kde najdete úplné podrobnosti.
Pokud byste chtěli vidět poněkud komplikovanou aplikaci, podívejte se na tuto aplikaci analogových hodin. Ciferník je ve skutečnosti graf a graf se aktualizuje každou sekundu, aby zobrazoval denní dobu. Zbytečné, ale zábavné.
Aplikace pro analogové hodiny.
Události stisku kláves
Při práci Excel neustále sleduje, co píšete. Z tohoto důvodu můžete věci nastavit tak, aby stisk klávesy nebo kombinace kláves provedl proceduru.
Zde je příklad, který změní přiřazení kláves PgDn a PgUp:
Sub Setup_OnKey()
Application.OnKey „{PgDn}“, „PgDn_Sub“
Application.OnKey „{PgUp}“, „PgUp_Sub“
End Sub
Sub PgDn_Sub()
Při chybě pokračovat dále
ActiveCell.Offset(1, 0).Aktivovat
End Sub
Sub PgUp_Sub()
Při chybě pokračovat dále
ActiveCell.Offset(-1, 0).Aktivovat
End Sub
Po nastavení událostí OnKey provedením procedury Setup_OnKey se stisknutím PgDn přesunete o jeden řádek dolů. Stisknutím tlačítka PgUp se přesunete o jeden řádek nahoru.
Všimněte si, že kódy kláves jsou uzavřeny ve složených závorkách, nikoli v závorkách. Úplný seznam kódů klávesnice naleznete v systému nápovědy. Vyhledejte OnKey.
V tomto příkladu se příkaz On Error Resume Next používá k ignorování všech generovaných chyb. Pokud je například aktivní buňka v prvním řádku, pokus o posun o jeden řádek nahoru způsobí chybu, kterou lze bezpečně ignorovat. A pokud je aktivní list s grafem, není zde žádná aktivní buňka.
Provedením následující rutiny zrušíte události OnKey:
Sub Cancel_OnKey()
Application.OnKey „{PgDn}“
Application.OnKey „{PgUp}“
End Sub
Pomocí prázdný řetězec jako druhý argument pro onkey metody však nelze zrušit onkey událost. Spíše způsobí, že Excel jednoduše ignoruje stisk klávesy. Například následující příkaz říká Excelu, aby ignoroval Alt+F4. Znak procenta představuje klávesu Alt:
Application.OnKey „%{F4}“, „“
Ačkoli můžete použít metodu OnKey k přiřazení klávesové zkratky pro provádění makra, měli byste pro tento úkol použít dialogové okno Možnosti makra.
Pokud zavřete sešit obsahující kód a necháte Excel otevřený, metoda OnKey nebude resetována. V důsledku toho stisknutí klávesové zkratky způsobí, že Excel automaticky otevře soubor s makrem. Abyste tomu zabránili, měli byste do kódu události Workbook_BeforeClose zahrnout kód pro resetování události OnKey.