Der er to typer hændelser, du kan bruge i VBA-programmering til Excel 2016, som ikke er knyttet til objekter: tid og tastetryk. Fordi tid og tastetryk ikke er knyttet til et bestemt objekt, såsom en projektmappe eller et regneark, programmerer du disse hændelser i et normalt VBA-modul.
OnTime-begivenheden
OnTime-hændelsen opstår, når et bestemt tidspunkt på dagen indtræffer. Følgende eksempel viser, hvordan du får Excel til at udføre en procedure, når hændelsen kl. 15.00 indtræffer. I dette tilfælde fortæller en robotstemme dig, at du skal vågne op, ledsaget af en beskedboks:
Sub SetAlarm()
Application.OnTime 0.625, "DisplayAlarm"
Slut Sub
Sub DisplayAlarm()
Application.Speech.Speak ("Hey, vågn op")
MsgBox “ Det er tid til din eftermiddagspause!”
Slut Sub
I dette eksempel bruges OnTime-metoden for Application-objektet. Denne metode tager to argumenter: klokkeslættet (0,625 eller 15:00) og navnet på den underprocedure, der skal udføres, når tidshændelsen indtræffer (DisplayAlarm).
Denne procedure er ganske nyttig, hvis du har tendens til at blive så optaget af dit arbejde, at du glemmer møder og aftaler. Indstil bare en OnTime-begivenhed for at minde dig selv.
De fleste har svært ved at tænke på tid i forhold til Excel-nummereringssystemet. Derfor vil du måske bruge VBA TimeValue-funktionen til at repræsentere tiden. TimeValue konverterer en streng, der ligner en tid, til en værdi, som Excel kan håndtere. Følgende erklæring viser en nemmere måde at programmere en begivenhed til kl. 15:00:
Application.OnTime TimeValue(“3:00:00 pm”), “DisplayAlarm”
Hvis du vil planlægge en begivenhed i forhold til det aktuelle tidspunkt (for eksempel 20 minutter fra nu), kan du bruge en erklæring som denne:
Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”
Du kan også bruge OnTime-metoden til at køre en VBA-procedure på en bestemt dag. Du skal sikre dig, at din computer bliver ved med at køre, og at projektmappen med proceduren holdes åben. Følgende erklæring kører DisplayAlarm-proceduren kl. 17.00 den 31. december 2016:
Application.OnTime DateValue(“12/31/2016 5:00 pm”), “DisplayAlarm”
Denne særlige kodelinje kan være nyttig til at advare dig om, at du skal hjem og gøre dig klar til nytårsfestlighederne.
Her er et andet eksempel, der bruger OnTime-begivenheden. Udførelse af UpdateClock-procedurerne skriver tiden til celle A1 og programmerer også en anden hændelse fem sekunder senere. Denne hændelse kører UpdateClock-proceduren igen. Nettoeffekten er, at celle A1 opdateres med den aktuelle tid hvert femte sekund. For at stoppe begivenhederne skal du udføre StopClock-proceduren (som annullerer begivenheden). Bemærk, at NextTick er en variabel på modulniveau, der gemmer tidspunktet for den næste begivenhed.
Dæmp NextTick As Date
Sub UpdateClock()
' Opdaterer celle A1 med det aktuelle klokkeslæt
ThisWorkbook.Sheets(1).Range(“A1”) = Tid
' Konfigurer den næste begivenhed fem sekunder fra nu
NextTick = Now + TimeValue(“00:00:05”)
Application.OnTime NextTick, "UpdateClock"
Slut Sub
Sub StopClock()
' Annullerer OnTime-begivenheden (stopper uret)
Ved fejl Genoptag Næste
Application.OnTime NextTick, “UpdateClock”, , False
Slut Sub
OnTime-hændelsen fortsætter, selv efter at projektmappen er lukket. Med andre ord, hvis du lukker projektmappen uden at køre StopClock-proceduren, vil projektmappen genåbne sig selv om fem sekunder (forudsat at Excel stadig kører). For at forhindre dette skal du bruge en Workbook_BeforeClose-hændelsesprocedure, der indeholder følgende sætning:
Ring til StopClock
OnTime-metoden har to yderligere argumenter. Hvis du planlægger at bruge denne metode, bør du henvise til hjælpesystemet for fuldstændige detaljer.
Hvis du gerne vil se en ret kompliceret applikation, så tjek denne analoge urapplikation. Urskiven er faktisk et diagram, og diagrammet opdateres hvert sekund for at vise tidspunktet på dagen. Ubrugeligt, men sjovt.
En analog ur-applikation.
Tastetryk begivenheder
Mens du arbejder, overvåger Excel konstant, hvad du skriver. På grund af dette kan du indstille tingene, så et tastetryk eller en tastekombination udfører en procedure.
Her er et eksempel, der omtildeler PgDn- og PgUp-tasterne:
Sub Setup_OnKey()
Application.OnKey "{PgDn}", "PgDn_Sub"
Application.OnKey "{PgUp}", "PgUp_Sub"
Slut Sub
Sub PgDn_Sub()
Ved fejl Genoptag Næste
ActiveCell.Offset(1, 0).Aktiver
Slut Sub
Sub PgUp_Sub()
Ved fejl Genoptag Næste
ActiveCell.Offset(-1, 0).Aktiver
Slut Sub
Efter opsætning af OnKey-begivenheder ved at udføre Setup_OnKey-proceduren, flyttes du én række ned, når du trykker på PgDn. Ved at trykke på PgUp flyttes du en række op.
Bemærk, at nøglekoderne er omgivet af klammeparenteser, ikke i parentes. Se hjælpesystemet for at få en komplet liste over tastaturkoder. Søg efter OnKey.
I dette eksempel bruges On Error Resume Next til at ignorere eventuelle fejl, der genereres. For eksempel, hvis den aktive celle er i den første række, forårsager forsøg på at flytte en række op en fejl, som sikkert kan ignoreres. Og hvis et diagramark er aktivt, er der ingen aktiv celle.
Ved at udføre følgende rutine annullerer du OnKey-begivenhederne:
Sub Cancel_OnKey()
Application.OnKey "{PgDn}"
Application.OnKey "{PgUp}"
Slut Sub
Brug af en tom streng som det andet argument for OnKey-metoden annullerer ikke OnKey-hændelsen. Snarere får det Excel til blot at ignorere tastetrykket. For eksempel fortæller følgende sætning Excel at ignorere Alt+F4. Procenttegnet repræsenterer Alt-tasten:
Application.OnKey "%{F4}", ""
Selvom du kan bruge OnKey-metoden til at tildele en genvejstast til at udføre en makro, bør du bruge dialogboksen Makroindstillinger til denne opgave.
Hvis du lukker projektmappen, der indeholder koden, og lader Excel være åben, nulstilles OnKey-metoden ikke. Som en konsekvens heraf vil et tryk på genvejstasten få Excel til automatisk at åbne filen med makroen. For at forhindre dette i at ske, bør du inkludere kode i din Workbook_BeforeClose-hændelseskode for at nulstille OnKey-hændelsen.