Ekzistojnë dy lloje ngjarjesh që mund të përdorni në programimin VBA për Excel 2016 që nuk shoqërohen me objekte: koha dhe shtypja e tastit. Për shkak se koha dhe shtypja e tasteve nuk shoqërohen me një objekt të caktuar si p.sh. një libër pune ose një fletë pune, ju i programoni këto ngjarje në një modul normal VBA.
Ngjarja OnTime
Ngjarja OnTime ndodh kur ndodh një kohë e caktuar e ditës. Shembulli i mëposhtëm tregon se si të merrni Excel për të ekzekutuar një procedurë kur ndodh ngjarja e orës 3 pasdite. Në këtë rast, një zë roboti ju thotë të zgjoheni, i shoqëruar nga një kuti mesazhi:
Nën SetAlarm()
Aplikimi.OnTime 0.625, "DisplayAlarm"
Fundi Nën
Sub DisplayAlarm()
Application.Speech.Speak ("Hej, zgjohu")
MsgBox " Është koha për pushimin tuaj të pasdites!"
Fundi Nën
Në këtë shembull, përdoret metoda OnTime e objektit Application. Kjo metodë merr dy argumente: kohën (0.625 ose 3:00 pasdite) dhe emrin e procedurës Nën për t'u ekzekutuar kur ndodh ngjarja e kohës (DisplayAlarm).
Kjo procedurë është mjaft e dobishme nëse tentoni të mbështilleni aq shumë në punën tuaj sa të harroni takimet dhe takimet. Thjesht vendosni një ngjarje OnTime për t'i kujtuar vetes.
Shumica e njerëzve e kanë të vështirë të mendojnë kohën për sa i përket sistemit të numërimit Excel. Prandaj, mund të dëshironi të përdorni funksionin VBA TimeValue për të përfaqësuar kohën. TimeValue konverton një varg që duket si një kohë në një vlerë që Excel mund të trajtojë. Deklarata e mëposhtme tregon një mënyrë më të lehtë për të programuar një ngjarje për orën 15:00:
Aplikimi.Vlera kohore në kohë (“3:00:00 pasdite”), “DisplayAlarm”
Nëse dëshironi të planifikoni një ngjarje në lidhje me kohën aktuale (për shembull, 20 minuta nga tani), mund të përdorni një deklaratë si kjo:
Application.OnTime Tani + TimeValue ("00:20:00"), "DisplayAlarm"
Ju gjithashtu mund të përdorni metodën OnTime për të ekzekutuar një procedurë VBA në një ditë të caktuar. Duhet të siguroheni që kompjuteri juaj të vazhdojë të funksionojë dhe që libri i punës me procedurën të mbahet i hapur. Deklarata e mëposhtme drejton procedurën DisplayAlarm në orën 17:00 më 31 dhjetor 2016:
Aplikimi.Vlera e datës në kohë ("12/31/2016 5:00 pasdite"), "DisplayAlarm"
Kjo linjë e veçantë kodi mund të jetë e dobishme për t'ju paralajmëruar se duhet të shkoni në shtëpi dhe të përgatiteni për festimet e Vitit të Ri.
Ja një shembull tjetër që përdor ngjarjen OnTime. Ekzekutimi i procedurave UpdateClock shkruan kohën në qelizën A1 dhe gjithashtu programon një ngjarje tjetër pesë sekonda më vonë. Kjo ngjarje përsërit procedurën UpdateClock. Efekti neto është që qeliza A1 përditësohet me kohën aktuale çdo pesë sekonda. Për të ndaluar ngjarjet, ekzekutoni procedurën StopClock (e cila anulon ngjarjen). Vini re se NextTick është një ndryshore e nivelit të modulit që ruan kohën për ngjarjen tjetër.
Dim Next Shënoni si datë
Nën UpdateClock ()
' Përditëson qelizën A1 me kohën aktuale
This Workbook.Sheets(1).Range(“A1”) = Koha
' Vendosni ngjarjen e ardhshme pesë sekonda nga tani
NextTick = Tani + Vlera kohore (“00:00:05”)
Application.OnTime NextTick, "UpdateClock"
Fundi Nën
Nën StopClock ()
' Anulon ngjarjen OnTime (ndalon orën)
Në gabim Rifillo Tjetra
Aplikimi.OnTime NextTick, "UpdateClock", , False
Fundi Nën
Ngjarja OnTime vazhdon edhe pas mbylljes së librit të punës. Me fjalë të tjera, nëse e mbyllni librin e punës pa ekzekutuar procedurën StopClock, libri i punës do të rihapet vetë për pesë sekonda (duke supozuar se Excel është ende në punë). Për ta parandaluar këtë, përdorni një procedurë të ngjarjes Workbook_BeforeClose që përmban deklaratën e mëposhtme:
Thirrni StopClock
Metoda OnTime ka dy argumente shtesë. Nëse planifikoni të përdorni këtë metodë, duhet t'i referoheni sistemit të Ndihmës për detaje të plota.
Nëse dëshironi të shihni një aplikacion mjaft të komplikuar, shikoni këtë aplikacion të orës analoge. Fytyra e orës është në fakt një grafik dhe grafiku përditësohet çdo sekondë për të shfaqur kohën e ditës. E padobishme, por argëtuese.
Një aplikacion me orë analoge.
Ngjarjet e shtypjes së tastierës
Ndërsa punoni, Excel monitoron vazhdimisht atë që shkruani. Për shkak të kësaj, ju mund t'i konfiguroni gjërat në mënyrë që një shtypje tasti ose një kombinim tasti të ekzekutojë një procedurë.
Ja një shembull që ricakton çelësat PgDn dhe PgUp:
Nën Setup_OnKey()
Aplikimi.OnKey "{PgDn}", "PgDn_Sub"
Aplikimi.OnKey "{PgUp}", "PgUp_Sub"
Fundi Nën
Nën PgDn_Sub()
Në gabim Rifillo Tjetra
ActiveCell.Offset(1, 0).Aktivizo
Fundi Nën
Nën PgUp_Sub()
Në gabim Rifillo Tjetra
ActiveCell.Offset(-1, 0).Aktivizo
Fundi Nën
Pas konfigurimit të ngjarjeve OnKey duke ekzekutuar procedurën Setup_OnKey, shtypja e PgDn ju zhvendos një rresht poshtë. Shtypja e PgUp ju çon një rresht lart.
Vini re se kodet kryesore janë të mbyllura në kllapa, jo në kllapa. Për një listë të plotë të kodeve të tastierës, konsultohuni me sistemin e ndihmës. Kërko për OnKey.
Në këtë shembull, On Error Resume Next përdoret për të injoruar çdo gabim që krijohet. Për shembull, nëse qeliza aktive është në rreshtin e parë, përpjekja për të lëvizur një rresht lart shkakton një gabim që mund të shpërfillet në mënyrë të sigurt. Dhe nëse një fletë grafiku është aktive, nuk ka asnjë qelizë aktive.
Duke ekzekutuar rutinën e mëposhtme, ju anuloni ngjarjet OnKey:
Nën Cancel_OnKey()
Aplikimi.OnKey "{PgDn}"
Aplikimi.OnKey "{PgUp}"
Fundi Nën
Përdorimi i një vargu bosh si argumenti i dytë për metodën OnKey nuk e anulon ngjarjen OnKey. Përkundrazi, kjo bën që Excel thjesht të injorojë goditjen e tastit. Për shembull, deklarata e mëposhtme i thotë Excel-it të injorojë Alt+F4. Shenja e përqindjes përfaqëson tastin Alt:
Aplikimi.OnKey "%{F4}", ""
Edhe pse mund të përdorni metodën OnKey për të caktuar një çelës shkurtore për ekzekutimin e një makro, duhet të përdorni kutinë e dialogut Opsionet e Macro për këtë detyrë.
Nëse mbyllni librin e punës që përmban kodin dhe lini Excel të hapur, metoda OnKey nuk do të rivendoset. Si pasojë, shtypja e tastit të shkurtores do të bëjë që Excel të hapë automatikisht skedarin me makro. Për të parandaluar që kjo të ndodhë, duhet të përfshini kodin në kodin e ngjarjes së Workbook_BeforeClose për të rivendosur ngjarjen OnKey.