V programiranju VBA za Excel 2016 lahko uporabite dve vrsti dogodkov, ki niso povezani s predmeti: čas in pritiski tipk. Ker čas in pritiski na tipke niso povezani z določenim predmetom, kot je delovni zvezek ali delovni list, te dogodke programirate v običajnem modulu VBA.
Dogodek OnTime
Dogodek OnTime se pojavi, ko nastopi določen čas dneva. Naslednji primer prikazuje, kako pridobiti Excel, da izvede postopek, ko pride do dogodka ob 15. uri. V tem primeru vam robotski glas pove, da se zbudite, skupaj s sporočilom:
Sub SetAlarm()
Application.OnTime 0.625, “DisplayAlarm”
Končni sub
Sub DisplayAlarm()
Application.Speech.Speak (»Hej, zbudi se«)
MsgBox “ Čas je za vaš popoldanski oddih!”
Končni sub
V tem primeru je uporabljena metoda OnTime objekta Application. Ta metoda potrebuje dva argumenta: čas (0,625 ali 15:00) in ime podprocedure, ki se izvede, ko nastopi časovni dogodek (DisplayAlarm).
Ta postopek je zelo uporaben, če se tako zapletete v svoje delo, da pozabite na sestanke in sestanke. Samo nastavite dogodek OnTime, da se spomnite.
Večina ljudi težko razmišlja o času v smislu sistema številčenja Excel. Zato boste morda želeli uporabiti funkcijo VBA TimeValue za predstavitev časa. TimeValue pretvori niz, ki je videti kot čas, v vrednost, ki jo lahko obdela Excel. Naslednja izjava prikazuje lažji način za programiranje dogodka za 15.00:
Application.OnTime TimeValue(»3:00:00 pm«), »DisplayAlarm«
Če želite načrtovati dogodek glede na trenutni čas (na primer čez 20 minut), lahko uporabite izjavo, kot je ta:
Application.OnTime Now + TimeValue(»00:20:00«), »DisplayAlarm«
Metodo OnTime lahko uporabite tudi za zagon postopka VBA na določen dan. Poskrbeti morate, da vaš računalnik deluje še naprej in da je delovni zvezek s postopkom odprt. Naslednja izjava zažene postopek DisplayAlarm ob 17. uri 31. decembra 2016:
Application.OnTime DateValue(»31.12.2016 17:00«), »DisplayAlarm«
Ta posebna kodna vrstica bi vam lahko prišla prav, da vas opozori, da morate iti domov in se pripraviti na silvestrovanje.
Tukaj je še en primer, ki uporablja dogodek OnTime. Izvajanje postopkov UpdateClock zapiše čas v celico A1 in pet sekund pozneje programira še en dogodek. Ta dogodek znova zažene postopek UpdateClock. Neto učinek je, da se celica A1 vsakih pet sekund posodobi s trenutnim časom. Če želite ustaviti dogodke, izvedite postopek StopClock (ki prekliče dogodek). Upoštevajte, da je NextTick spremenljivka na ravni modula, ki shrani čas za naslednji dogodek.
Zatemni naslednji kljukico kot datum
Sub UpdateClock()
' Posodobi celico A1 s trenutnim časom
Ta delovni zvezek. Listi (1). Obseg (»A1«) = Čas
« Nastavite naslednji dogodek čez pet sekund
NextTick = Zdaj + TimeValue (»00:00:05«)
Application.OnTime NextTick, “UpdateClock”
Končni sub
Sub StopClock()
' Prekliče dogodek OnTime (ustavi uro)
Ob napaki Nadaljuj naprej
Application.OnTime NextTick, “UpdateClock”, , False
Končni sub
Dogodek OnTime ostane tudi po zaprtju delovnega zvezka. Z drugimi besedami, če zaprete delovni zvezek, ne da bi zagnali postopek StopClock, se bo delovni zvezek znova odprl v petih sekundah (ob predpostavki, da se Excel še vedno izvaja). Če želite to preprečiti, uporabite postopek dogodka Workbook_BeforeClose, ki vsebuje naslednji stavek:
Pokličite StopClock
Metoda OnTime ima dva dodatna argumenta. Če nameravate uporabiti to metodo, se za popolne podrobnosti obrnite na sistem pomoči.
Če želite videti precej zapleteno aplikacijo, si oglejte to aplikacijo za analogno uro. Številka ure je pravzaprav grafikon, grafikon pa se posodablja vsako sekundo, da prikaže čas dneva. Neuporabno, a zabavno.
Aplikacija za analogno uro.
Dogodki s pritiskom na tipko
Med delom Excel nenehno spremlja, kaj vnašate. Zaradi tega lahko stvari nastavite tako, da pritisk na tipko ali kombinacija tipk izvede postopek.
Tukaj je primer, ki ponovno dodeli tipki PgDn in PgUp:
Sub Setup_OnKey()
Application.OnKey “{PgDn}”, “PgDn_Sub”
Application.OnKey “{PgUp}”, “PgUp_Sub”
Končni sub
Sub PgDn_Sub()
Ob napaki Nadaljuj naprej
ActiveCell.Offset(1, 0).Aktiviraj
Končni sub
Sub PgUp_Sub()
Ob napaki Nadaljuj naprej
ActiveCell.Offset(-1, 0).Aktiviraj
Končni sub
Ko nastavite dogodke OnKey z izvajanjem postopka Setup_OnKey, vas s pritiskom na PgDn premaknete za eno vrstico navzdol. Če pritisnete PgUp, se premaknete za eno vrstico navzgor.
Upoštevajte, da so kode tipk v oklepajih in ne v oklepajih. Za celoten seznam kod tipkovnic se obrnite na sistem pomoči. Poiščite OnKey.
V tem primeru se ob napaki Resume Next uporablja za prezrtje vseh ustvarjenih napak. Na primer, če je aktivna celica v prvi vrstici, poskus premikanja za eno vrstico navzgor povzroči napako, ki jo je mogoče varno prezreti. In če je list grafikona aktiven, ni aktivne celice.
Z izvajanjem naslednje rutine prekličete dogodke OnKey:
Sub Cancel_OnKey()
Application.OnKey “{PgDn}”
Application.OnKey “{PgUp}”
Končni sub
Uporaba praznega niza kot drugega argumenta za metodo OnKey ne prekliče dogodka OnKey. Namesto tega povzroči, da Excel preprosto prezre pritisk na tipko. Na primer, naslednji stavek pove Excelu, naj prezre Alt + F4. Znak odstotka predstavlja tipko Alt:
Application.OnKey “%{F4}”, ““
Čeprav lahko uporabite metodo OnKey za dodelitev bližnjične tipke za izvajanje makra, morate za to nalogo uporabiti pogovorno okno Možnosti makra.
Če zaprete delovni zvezek, ki vsebuje kodo, in pustite Excel odprt, metoda OnKey ne bo ponastavljena. Posledično bo s pritiskom na bližnjico Excel samodejno odprl datoteko z makrom. Da se to ne bi zgodilo, morate vključiti kodo v kodo dogodka Workbook_BeforeClose, da ponastavite dogodek OnKey.