Det finns två typer av händelser du kan använda i VBA-programmering för Excel 2016 som inte är associerade med objekt: tid och knapptryckningar. Eftersom tid och knapptryckningar inte är associerade med ett visst objekt såsom en arbetsbok eller ett kalkylblad, programmerar du dessa händelser i en vanlig VBA-modul.
OnTime-händelsen
OnTime-händelsen inträffar när en viss tid på dagen inträffar. Följande exempel visar hur du får Excel att köra en procedur när händelsen 15.00 inträffar. I det här fallet säger en robotröst dig att vakna, åtföljd av en meddelanderuta:
Sub SetAlarm()
Application.OnTime 0.625, "DisplayAlarm"
Avsluta Sub
Sub DisplayAlarm()
Application.Speech.Speak ("Hej, vakna")
MsgBox “ Det är dags för eftermiddagsuppehåll!”
Avsluta Sub
I det här exemplet används OnTime-metoden för Application-objektet. Denna metod kräver två argument: tiden (0,625 eller 15:00) och namnet på den underordnade proceduren som ska utföras när tidshändelsen inträffar (DisplayAlarm).
Denna procedur är ganska användbar om du tenderar att bli så insvept i ditt arbete att du glömmer möten och möten. Ställ bara in en OnTime-händelse för att påminna dig själv.
De flesta har svårt att tänka på tid i termer av numreringssystemet Excel. Därför kanske du vill använda VBA TimeValue-funktionen för att representera tiden. TimeValue konverterar en sträng som ser ut som en tid till ett värde som Excel kan hantera. Följande uttalande visar ett enklare sätt att programmera en händelse för 15:00:
Application.OnTime TimeValue(“3:00:00 pm”), “DisplayAlarm”
Om du vill schemalägga en händelse i förhållande till den aktuella tiden (till exempel 20 minuter från nu), kan du använda ett uttalande så här:
Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”
Du kan också använda OnTime-metoden för att köra en VBA-procedur en viss dag. Du måste se till att din dator fortsätter att köras och att arbetsboken med proceduren hålls öppen. Följande uttalande kör DisplayAlarm-proceduren kl. 17.00 den 31 december 2016:
Application.OnTime DateValue(“12/31/2016 5:00 pm”), “DisplayAlarm”
Denna speciella kodrad kan vara praktisk för att varna dig om att du måste gå hem och göra dig redo för nyårsfestligheterna.
Här är ett annat exempel som använder OnTime-händelsen. Genom att köra UpdateClock-procedurerna skrivs tiden till cell A1 och programmeras även en annan händelse fem sekunder senare. Denna händelse körs UpdateClock-proceduren igen. Nettoeffekten är att cell A1 uppdateras med aktuell tid var femte sekund. För att stoppa händelserna, kör StopClock-proceduren (som avbryter händelsen). Observera att NextTick är en variabel på modulnivå som lagrar tiden för nästa händelse.
Dimma NästaBocka som datum
Sub UpdateClock()
' Uppdaterar cell A1 med aktuell tid
ThisWorkbook.Sheets(1).Range(“A1”) = Tid
' Ställ in nästa händelse om fem sekunder
NextTick = Nu + TimeValue(“00:00:05”)
Application.OnTime NextTick, "UpdateClock"
Avsluta Sub
Sub StopClock()
' Avbryter OnTime-händelsen (stoppar klockan)
Vid fel Resume Next
Application.OnTime NextTick, “UpdateClock”, , False
Avsluta Sub
OnTime-händelsen kvarstår även efter att arbetsboken stängts. Med andra ord, om du stänger arbetsboken utan att köra StopClock-proceduren, kommer arbetsboken att öppnas igen efter fem sekunder (förutsatt att Excel fortfarande körs). För att förhindra detta, använd en Workbook_BeforeClose-händelseprocedur som innehåller följande uttalande:
Ring StopClock
OnTime-metoden har ytterligare två argument. Om du planerar att använda den här metoden bör du gå till hjälpsystemet för fullständig information.
Om du vill se en ganska komplicerad applikation, kolla in denna analoga klockapplikation. Urtavlan är faktiskt ett diagram, och diagrammet uppdateras varje sekund för att visa tiden på dygnet. Onödigt, men kul.

En analog klockapplikation.
Knapptryckningshändelser
Medan du arbetar övervakar Excel ständigt vad du skriver. På grund av detta kan du ställa in saker så att en tangenttryckning eller en tangentkombination exekverar en procedur.
Här är ett exempel som omtilldelar tangenterna PgDn och PgUp:
Sub Setup_OnKey()
Application.OnKey "{PgDn}", "PgDn_Sub"
Application.OnKey "{PgUp}", "PgUp_Sub"
Avsluta Sub
Sub PgDn_Sub()
Vid fel Resume Next
ActiveCell.Offset(1, 0).Aktivera
Avsluta Sub
Sub PgUp_Sub()
Vid fel Resume Next
ActiveCell.Offset(-1, 0).Aktivera
Avsluta Sub
Efter att ha ställt in OnKey-händelserna genom att utföra Setup_OnKey-proceduren, trycker du på PgDn för att flytta dig ner en rad. Genom att trycka på PgUp flyttas du upp en rad.
Observera att nyckelkoderna är omgivna av klammerparenteser, inte inom parentes. För en fullständig lista över tangentbordskoder, se hjälpsystemet. Sök efter OnKey.
I det här exemplet används On Error Resume Next för att ignorera eventuella fel som genereras. Till exempel, om den aktiva cellen är i den första raden, orsakar ett försök att flytta upp en rad ett fel som säkert kan ignoreras. Och om ett diagramblad är aktivt finns det ingen aktiv cell.
Genom att utföra följande rutin avbryter du OnKey-händelserna:
Sub Cancel_OnKey()
Application.OnKey "{PgDn}"
Application.OnKey "{PgUp}"
Avsluta Sub
Med användning av en tom sträng som det andra argumentet för OnKey metoden betyder inte avbryta OnKey händelse. Snarare får det Excel att helt enkelt ignorera tangenttryckningen. Följande sats säger till exempel att Excel ska ignorera Alt+F4. Procenttecknet representerar Alt-tangenten:
Application.OnKey "%{F4}", ""
Även om du kan använda OnKey-metoden för att tilldela en genvägsknapp för att köra ett makro, bör du använda dialogrutan Makroalternativ för den här uppgiften.
Om du stänger arbetsboken som innehåller koden och lämnar Excel öppet, kommer OnKey-metoden inte att återställas. Som en konsekvens kommer att trycka på genvägstangenten göra att Excel automatiskt öppnar filen med makrot. För att förhindra att detta händer bör du inkludera kod i din Workbook_BeforeClose-händelsekod för att återställa OnKey-händelsen.