Det er to typer hendelser du kan bruke i VBA-programmering for Excel 2016 som ikke er knyttet til objekter: tid og tastetrykk. Fordi tid og tastetrykk ikke er knyttet til et bestemt objekt, for eksempel en arbeidsbok eller et regneark, programmerer du disse hendelsene i en vanlig VBA-modul.
OnTime-arrangementet
OnTime-hendelsen oppstår når en bestemt tid på dagen inntreffer. Følgende eksempel viser hvordan du får Excel til å utføre en prosedyre når 15.00-hendelsen inntreffer. I dette tilfellet ber en robotstemme deg om å våkne, ledsaget av en meldingsboks:
Sub SetAlarm()
Application.OnTime 0.625, "DisplayAlarm"
End Sub
Sub DisplayAlarm()
Application.Speech.Speak ("Hei, våkn opp")
MsgBox “ Det er tid for ettermiddagspausen!”
End Sub
I dette eksemplet brukes OnTime-metoden til Application-objektet. Denne metoden tar to argumenter: klokkeslettet (0,625 eller 15:00) og navnet på Sub-prosedyren som skal utføres når tidshendelsen inntreffer (DisplayAlarm).
Denne prosedyren er ganske nyttig hvis du har en tendens til å bli så opptatt av arbeidet ditt at du glemmer møter og avtaler. Bare still inn en OnTime-hendelse for å minne deg selv på det.
De fleste synes det er vanskelig å tenke på tid i form av Excel-nummereringssystemet. Derfor kan det være lurt å bruke VBA TimeValue-funksjonen til å representere tiden. TimeValue konverterer en streng som ser ut som en tid til en verdi som Excel kan håndtere. Følgende uttalelse viser en enklere måte å programmere et arrangement til kl. 15:00:
Application.OnTime TimeValue(“3:00:00 pm”), “DisplayAlarm”
Hvis du vil planlegge en hendelse i forhold til gjeldende tid (for eksempel 20 minutter fra nå), kan du bruke en uttalelse som denne:
Application.OnTime Now + TimeValue(“00:20:00”), “DisplayAlarm”
Du kan også bruke OnTime-metoden til å kjøre en VBA-prosedyre på en bestemt dag. Du må sørge for at datamaskinen fortsetter å kjøre og at arbeidsboken med prosedyren holdes åpen. Følgende uttalelse kjører DisplayAlarm-prosedyren kl. 17.00 31. desember 2016:
Application.OnTime DateValue(“12/31/2016 5:00 pm”), “DisplayAlarm”
Denne spesielle kodelinjen kan være nyttig for å advare deg om at du må gå hjem og gjøre deg klar for nyttårsaften.
Her er et annet eksempel som bruker OnTime-hendelsen. Utførelse av UpdateClock-prosedyrene skriver tiden til celle A1 og programmerer også en annen hendelse fem sekunder senere. Denne hendelsen kjører UpdateClock-prosedyren på nytt. Nettoeffekten er at celle A1 oppdateres med gjeldende tid hvert femte sekund. For å stoppe hendelsene, utfør StopClock-prosedyren (som avbryter hendelsen). Merk at NextTick er en variabel på modulnivå som lagrer tiden for neste hendelse.
Demp NextKick som dato
Sub UpdateClock()
' Oppdaterer celle A1 med gjeldende tid
ThisWorkbook.Sheets(1).Range(“A1”) = Tid
' Sett opp neste hendelse fem sekunder fra nå
NextTick = Nå + Tidsverdi(“00:00:05”)
Application.OnTime NextKick av, "UpdateClock"
End Sub
Sub StopClock()
' Avbryter OnTime-hendelsen (stopper klokken)
Ved feil på Fortsett neste
Application.OnTime NextKick av, "UpdateClock", , False
End Sub
OnTime-hendelsen vedvarer selv etter at arbeidsboken er lukket. Med andre ord, hvis du lukker arbeidsboken uten å kjøre StopClock-prosedyren, vil arbeidsboken åpne seg på nytt om fem sekunder (forutsatt at Excel fortsatt kjører). For å forhindre dette, bruk en Workbook_BeforeClose-hendelsesprosedyre som inneholder følgende setning:
Ring StopClock
OnTime-metoden har ytterligere to argumenter. Hvis du planlegger å bruke denne metoden, bør du se hjelpesystemet for fullstendige detaljer.
Hvis du vil se en ganske komplisert applikasjon, sjekk ut denne analoge klokkeapplikasjonen. Urskiven er faktisk et diagram, og diagrammet oppdateres hvert sekund for å vise klokkeslettet. Ubrukelig, men morsomt.
En analog klokkeapplikasjon.
Tastetrykk hendelser
Mens du jobber, overvåker Excel hele tiden hva du skriver. På grunn av dette kan du sette opp ting slik at et tastetrykk eller en tastekombinasjon utfører en prosedyre.
Her er et eksempel som tildeler PgDn- og PgUp-tastene på nytt:
Sub Setup_OnKey()
Application.OnKey «{PgDn}», «PgDn_Sub»
Application.OnKey «{PgUp}», «PgUp_Sub»
End Sub
Sub PgDn_Sub()
Ved feil på Fortsett neste
ActiveCell.Offset(1, 0).Aktiver
End Sub
Sub PgUp_Sub()
Ved feil på Fortsett neste
ActiveCell.Offset(-1, 0).Aktiver
End Sub
Etter å ha satt opp OnKey-hendelsene ved å utføre Setup_OnKey-prosedyren, trykker du på PgDn for å flytte deg ned en rad. Ved å trykke PgUp flyttes du opp en rad.
Legg merke til at nøkkelkodene er omgitt av klammeparenteser, ikke i parentes. For en fullstendig liste over tastaturkoder, se hjelpesystemet. Søk etter OnKey.
I dette eksemplet brukes On Error Resume Next for å ignorere eventuelle feil som genereres. For eksempel, hvis den aktive cellen er i den første raden, vil forsøk på å flytte opp en rad forårsake en feil som trygt kan ignoreres. Og hvis et diagramark er aktivt, er det ingen aktiv celle.
Ved å utføre følgende rutine kansellerer du OnKey-hendelsene:
Sub Cancel_OnKey()
Application.OnKey «{PgDn}»
Application.OnKey «{PgUp}»
End Sub
Ved å bruke en tom streng som andre argument for onkey metoden ikke avbryte onkey arrangementet. Snarere får det Excel til å ignorere tastetrykket. Følgende setning ber for eksempel Excel om å ignorere Alt+F4. Prosenttegnet representerer Alt-tasten:
Application.OnKey "%{F4}", ""
Selv om du kan bruke OnKey-metoden til å tilordne en snarvei for å utføre en makro, bør du bruke dialogboksen Makroalternativer for denne oppgaven.
Hvis du lukker arbeidsboken som inneholder koden og lar Excel være åpen, vil ikke OnKey-metoden bli tilbakestilt. Som en konsekvens vil et trykk på hurtigtasten føre til at Excel automatisk åpner filen med makroen. For å forhindre at dette skjer, bør du inkludere kode i Workbook_BeforeClose-hendelseskoden for å tilbakestille OnKey-hendelsen.