Az Excel 2016 VBA programozásában kétféle esemény használható, amelyek nincsenek objektumokhoz társítva: idő és billentyűlenyomás. Mivel az idő és a billentyűlenyomások nincsenek egy adott objektumhoz, például munkafüzethez vagy munkalaphoz társítva, ezeket az eseményeket egy normál VBA-modulban programozza.
Az OnTime esemény
Az OnTime esemény akkor következik be, amikor egy adott napszakban előfordul. A következő példa bemutatja, hogyan kell az Excelt végrehajtani egy eljárás során, amikor a délután 3 óra esemény bekövetkezik. Ebben az esetben egy robothang üzenődoboz kíséretében ébredést kér:
Sub SetAlarm()
Application.OnTime 0.625, „DisplayAlarm”
Vége Sub
Sub DisplayAlarm()
Alkalmazás.Beszéd.Beszéd („Hé, ébredj fel”)
MsgBox „Itt az ideje a délutáni szünetnek!”
Vége Sub
Ebben a példában az Application objektum OnTime metódusát használjuk. Ez a metódus két argumentumot használ: az időt (0,625 vagy 15:00) és az időesemény bekövetkezésekor végrehajtandó aleljárás nevét (DisplayAlarm).
Ez az eljárás nagyon hasznos, ha hajlamos annyira belemerülni a munkájába, hogy megfeledkezik a találkozókról és találkozókról. Csak állítson be egy OnTime eseményt, hogy emlékeztesse magát.
A legtöbb ember nehezen gondolja az időt az Excel számozási rendszerben. Ezért érdemes a VBA TimeValue függvényt használni az idő megjelenítésére. A TimeValue az időnek tűnő karakterláncot olyan értékké alakítja, amelyet az Excel kezelni tud. Az alábbi nyilatkozat egy egyszerűbb módot mutat be egy esemény 15 órára történő programozására:
Application.OnTime TimeValue("15:00:00"), "DisplayAlarm"
Ha egy eseményt az aktuális időhöz képest szeretne ütemezni (például 20 perc múlva), használhatja a következő utasításokat:
Application.OnTime Now + TimeValue("00:20:00"), "DisplayAlarm"
Az OnTime módszerrel VBA-eljárást is futtathat egy adott napon. Győződjön meg arról, hogy a számítógép folyamatosan fut, és az eljárást tartalmazó munkafüzet nyitva van. A következő nyilatkozattal fut a DisplayAlarm eljárás 2016. december 31-én 17 órakor:
Application.OnTime DateValue(“2016.12.31. 17:00”), „DisplayAlarm”
Ez a kódsor jól jöhet, hogy figyelmeztesse Önt arra, hogy haza kell mennie, és fel kell készülnie a szilveszteri mulatságra.
Íme egy másik példa, amely az OnTime eseményt használja. Az UpdateClock eljárások végrehajtása beírja az időt az A1 cellába, és egy másik eseményt is programoz öt másodperccel később. Ez az esemény újra futtatja az UpdateClock eljárást. A nettó hatás az, hogy az A1 cella öt másodpercenként frissül az aktuális idővel. Az események leállításához hajtsa végre a StopClock eljárást (amely törli az eseményt). Vegye figyelembe, hogy a NextTick egy modulszintű változó, amely a következő esemény idejét tárolja.
Dim NextTick As Date
Sub UpdateClock()
Frissíti az A1 cellát az aktuális idővel
ThisWorkbook.Sheets(1).Range(“A1”) = Idő
Állítsa be a következő eseményt öt másodperc múlva
NextTick = Most + Időérték ("00:00:05")
Application.OnTime NextTick, „UpdateClock”
Vége Sub
Sub StopClock()
Törli az OnTime eseményt (leállítja az órát)
Hiba esetén Folytatás a következőre
Application.OnTime NextTick, “UpdateClock”, , False
Vége Sub
Az OnTime esemény a munkafüzet bezárása után is megmarad. Más szóval, ha bezárja a munkafüzetet a StopClock eljárás futtatása nélkül, a munkafüzet öt másodpercen belül újra megnyílik (feltételezve, hogy az Excel még fut). Ennek megakadályozására használjon egy Workbook_BeforeClose eseményeljárást, amely a következő utasítást tartalmazza:
Hívja a StopClock-ot
Az OnTime metódusnak két további argumentuma van. Ha ezt a módszert tervezi használni, a súgórendszerben talál további részleteket.
Ha egy meglehetősen bonyolult alkalmazást szeretne látni, nézze meg ezt az analóg óra alkalmazást. Az óra számlapja valójában egy diagram, és a diagram másodpercenként frissül, hogy megjelenítse a napszakot. Haszontalan, de szórakoztató.

Analóg óra alkalmazás.
Billentyűnyomás események
Munka közben az Excel folyamatosan figyeli, hogy mit gépel. Emiatt beállíthatja a dolgokat úgy, hogy egy billentyűleütés vagy egy billentyűkombináció hajtson végre egy eljárást.
Íme egy példa a PgDn és a PgUp kulcsok újra hozzárendelésére:
Sub Setup_OnKey()
Application.OnKey „{PgDn}”, „PgDn_Sub”
Application.OnKey „{PgUp}”, „PgUp_Sub”
Vége Sub
Sub PgDn_Sub()
Hiba esetén Folytatás a következőre
ActiveCell.Offset(1, 0).Aktiválás
Vége Sub
Sub PgUp_Sub()
Hiba esetén Folytatás a következőre
ActiveCell.Offset(-1, 0).Aktiválás
Vége Sub
Miután beállította az OnKey eseményeket a Setup_OnKey eljárás végrehajtásával, a PgDn lenyomásával egy sorral lejjebb léphet. A PgUp megnyomásával egy sorral feljebb léphet.
Figyelje meg, hogy a kulcskódok kapcsos zárójelben vannak, nem pedig zárójelben. A billentyűzetkódok teljes listáját a Súgóban találja. Keresse meg az OnKey-t.
Ebben a példában az On Error Resume Next (Hiba esetén folytatás) funkciót használjuk a generált hibák figyelmen kívül hagyására. Például, ha az aktív cella az első sorban van, az egy sorral feljebb való mozgás olyan hibát okoz, amely nyugodtan figyelmen kívül hagyható. És ha egy diagramlap aktív, akkor nincs aktív cella.
A következő rutin végrehajtásával törölheti az OnKey eseményeket:
Sub Cancel_OnKey()
Application.OnKey „{PgDn}”
Application.OnKey „{PgUp}”
Vége Sub
Üres karakterlánc használata az OnKey metódus második argumentumaként nem törli az OnKey eseményt. Ehelyett az Excel egyszerűen figyelmen kívül hagyja a billentyűleütést. Például a következő utasítás arra utasítja az Excelt, hogy figyelmen kívül hagyja az Alt+F4-et. A százalékjel az Alt billentyűt jelöli:
Application.OnKey "%{F4}", ""
Bár az OnKey metódussal hozzárendelhet egy gyorsbillentyűt egy makró végrehajtásához, ehhez a feladathoz a Makróbeállítások párbeszédpanelt kell használnia.
Ha bezárja a kódot tartalmazó munkafüzetet, és nyitva hagyja az Excelt, az OnKey metódus nem áll vissza. Ennek eredményeként a billentyűparancs megnyomásával az Excel automatikusan megnyitja a fájlt a makróval. Ennek elkerülése érdekében az OnKey esemény visszaállításához vegyen fel kódot a Workbook_BeforeClose eseménykódba.