Postoje dvije vrste događaja koje možete koristiti u VBA programiranju za Excel 2016 koji nisu povezani s objektima: vrijeme i pritisci tipki. Budući da vrijeme i pritisci na tipke nisu povezani s određenim objektom kao što je radna knjiga ili radni list, te događaje programirate u normalnom VBA modulu.
Događaj OnTime
Događaj OnTime događa se kada se pojavi određeno doba dana. Sljedeći primjer pokazuje kako natjerati Excel da izvrši proceduru kada se dogodi događaj u 15 sati. U ovom slučaju, robotski glas govori da se probudite, popraćen okvirom za poruku:
PodsetAlarm()
Application.OnTime 0.625, "DisplayAlarm"
Kraj Sub
Sub DisplayAlarm()
Application.Speech.Speak ("Hej, probudi se")
MsgBox “ Vrijeme je za popodnevni odmor!”
Kraj Sub
U ovom primjeru koristi se metoda OnTime objekta Application. Ova metoda uzima dva argumenta: vrijeme (0,625 ili 15:00) i naziv potprocedure za izvršenje kada dođe do vremenskog događaja (DisplayAlarm).
Ovaj je postupak vrlo koristan ako ste se toliko zaokupili poslom da zaboravite na sastanke i sastanke. Samo postavite događaj OnTime da se podsjetite.
Većina ljudi smatra da je teško razmišljati o vremenu u smislu Excel sustava numeriranja. Stoga biste možda željeli koristiti funkciju VBA TimeValue za predstavljanje vremena. TimeValue pretvara niz koji izgleda kao vrijeme u vrijednost koju Excel može podnijeti. Sljedeća izjava pokazuje lakši način programiranja događaja za 15 sati:
Application.OnTime TimeValue(“3:00:00 pm”), “DisplayAlarm”
Ako želite zakazati događaj u odnosu na trenutačno vrijeme (na primjer, 20 minuta od sada), možete koristiti izjavu poput ove:
Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”
Također možete koristiti metodu OnTime za pokretanje VBA procedure određenog dana. Morate biti sigurni da vaše računalo nastavlja raditi i da je radna knjiga s postupkom otvorena. Sljedeća izjava pokreće DisplayAlarm proceduru u 17 sati 31. prosinca 2016.:
Application.OnTime DateValue(“31.12.2016 17:00”), “DisplayAlarm”
Ova konkretna linija koda mogla bi vam dobro doći da vas upozori da se morate vratiti kući i pripremiti se za novogodišnje svečanosti.
Evo još jednog primjera koji koristi događaj OnTime. Izvođenje procedure UpdateClock zapisuje vrijeme u ćeliju A1 i također programira drugi događaj pet sekundi kasnije. Ovaj događaj ponovno pokreće proceduru UpdateClock. Neto učinak je da se ćelija A1 ažurira trenutnim vremenom svakih pet sekundi. Da biste zaustavili događaje, izvršite proceduru StopClock (koja poništava događaj). Imajte na umu da je NextTick varijabla na razini modula koja pohranjuje vrijeme za sljedeći događaj.
Zatamnite sljedeću oznaku kao datum
Sub UpdateClock()
' Ažurira ćeliju A1 s trenutnim vremenom
Ova radna knjiga. Listovi (1). Raspon (“A1”) = Vrijeme
' Postavite sljedeći događaj za pet sekundi
NextTick = Sada + TimeValue(“00:00:05”)
Application.OnTime NextTick, "UpdateClock"
Kraj Sub
Sub StopClock()
' Otkazuje događaj OnTime (zaustavlja sat)
U slučaju pogreške Nastavi dalje
Application.OnTime NextTick, "UpdateClock", , False
Kraj Sub
Događaj OnTime traje čak i nakon zatvaranja radne knjige. Drugim riječima, ako zatvorite radnu knjigu bez pokretanja procedure StopClock, radna će se knjiga ponovno otvoriti za pet sekundi (pod pretpostavkom da je Excel još uvijek pokrenut). Da biste to spriječili, koristite proceduru događaja Workbook_BeforeClose koja sadrži sljedeću izjavu:
Pozovite StopClock
Metoda OnTime ima dva dodatna argumenta. Ako namjeravate koristiti ovu metodu, trebali biste se obratiti sustavu pomoći za potpune detalje.
Ako želite vidjeti prilično kompliciranu aplikaciju, pogledajte ovu aplikaciju za analogni sat. Brojač sata je zapravo grafikon, a grafikon se ažurira svake sekunde kako bi prikazao doba dana. Beskorisno, ali zabavno.
Aplikacija za analogni sat.
Događaji pritiska na tipku
Dok radite, Excel stalno prati što upisujete. Zbog toga možete postaviti stvari tako da pritisak na tipku ili kombinacija tipki izvrši proceduru.
Evo primjera koji ponovno dodjeljuje tipke PgDn i PgUp:
Sub Setup_OnKey()
Application.OnKey “{PgDn}”, “PgDn_Sub”
Application.OnKey “{PgUp}”, “PgUp_Sub”
Kraj Sub
Sub PgDn_Sub()
U slučaju pogreške Nastavi dalje
ActiveCell.Offset(1, 0).Aktiviraj
Kraj Sub
Sub PgUp_Sub()
U slučaju pogreške Nastavi dalje
ActiveCell.Offset(-1, 0).Aktiviraj
Kraj Sub
Nakon postavljanja OnKey događaja izvođenjem postupka Setup_OnKey, pritiskom na PgDn pomičete se za jedan redak prema dolje. Pritiskom na PgUp pomičete se za jedan red gore.
Primijetite da su šifre ključeva zatvorene u zagradama, a ne u zagradama. Za potpuni popis kodova tipkovnice pogledajte sustav pomoći. Potražite OnKey.
U ovom primjeru, On Error Resume Next koristi se za zanemarivanje svih generiranih pogrešaka. Na primjer, ako je aktivna ćelija u prvom retku, pokušaj pomicanja za jedan red gore uzrokuje pogrešku koja se može sigurno zanemariti. A ako je list grafikona aktivan, nema aktivne ćelije.
Izvođenjem sljedeće rutine otkazujete OnKey događaje:
Pod Cancel_OnKey()
Application.OnKey "{PgDn}"
Application.OnKey "{PgUp}"
Kraj Sub
Korištenje praznog niza kao drugog argumenta za metodu OnKey ne poništava događaj OnKey. Umjesto toga, to uzrokuje da Excel jednostavno ignorira pritisak na tipku. Na primjer, sljedeća izjava govori Excelu da zanemari Alt+F4. Znak postotka predstavlja tipku Alt:
Application.OnKey “%{F4}”, ““
Iako možete koristiti metodu OnKey za dodjelu tipke prečaca za izvršavanje makronaredbe, za ovaj zadatak trebate koristiti dijaloški okvir Mogućnosti makroa.
Ako zatvorite radnu knjigu koja sadrži kod i ostavite Excel otvoren, metoda OnKey neće se resetirati. Kao posljedica toga, pritiskom na tipku prečaca Excel će automatski otvoriti datoteku s makronaredbom. Kako biste spriječili da se to dogodi, trebali biste uključiti kod u svoj Workbook_BeforeClose kod događaja kako biste resetirali događaj OnKey.