Hvordan bruke Ontime Events og tastetrykk Hendelser i Excel 2016 VBA

Det finnes to typer hendelser du kan bruke i VBA programmering for Excel 2 016 som ikke er knyttet til objekter: tid og tastetrykk. Fordi tid og tastetrykk ikke er knyttet til en bestemt gjenstand som en arbeidsbok eller et regneark, programmere deg disse hendelsene i en normal VBA-modul.

Den OnTime hendelsen

oppstår The OnTime hendelse når en bestemt tid på dagen inntreffer. Følgende eksempel viser hvordan du kan få Excel til å utføre en prosedyre når 15:00 hendelse inntreffer. I dette tilfellet, forteller en robot stemme du å våkne opp, ledsaget av en meldingsboks:
Sub SetAlarm () Application.OnTime 0,625, "DisplayAlarm" End SubSub DisplayAlarm () Application.Speech.Speak ("Hei, våkn opp ") MsgBox" Det er tid for ettermiddagen pause! "End Sub

I dette eksemplet er OnTime metode for programmet objektet brukes. Denne metoden tar to argumenter: tiden (0,625 eller 3:00) og navnet på Sub prosedyre for å utføre når tiden hendelsen inntreffer (DisplayAlarm)

Denne prosedyren er ganske nyttig hvis du pleier å få. så pakket opp i ditt arbeid som du glemmer om møter og avtaler. Bare sette en OnTime begivenhet for å minne deg selv.
De fleste synes det er vanskelig å tenke på tid i form av Excel nummerering system. 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 utsagn viser en enklere måte å programmere en hendelse for 15:00:
Application.OnTime TIMEVALUE ("15:00:00"), "DisplayAlarm"

Hvis du vil planlegge en hendelse i forhold til gjeldende tid (for eksempel 20 minutter fra nå), kan du bruke en uttalelse som dette:
Application.OnTime nå + TIMEVALUE ("0:20:00"), "DisplayAlarm"

Du kan også bruke OnTime metode for å kjøre en VBA prosedyren på en bestemt dag. Du må sørge for at datamaskinen holder kjører, og at arbeidsboken med prosedyren holdes åpen. Følgende uttalelse kjører DisplayAlarm prosedyren på 17:00 på den 31 desember 2016:
Application.OnTime DATEVALUE ("12/31/2016 05:00"), "DisplayAlarm"

Denne spesielle kodelinje kunne komme i hendig å advare deg om at du trenger å gå hjem og gjør deg klar for nyttårsaften festligheter.

Her er et annet eksempel som bruker OnTime hendelsen. Utfører de UpdateClock prosedyrer skriver seg tid til celle A1 og også programmer annen hendelse fem sekunder senere. Denne hendelsen reruns den UpdateClock prosedyren. Nettoeffekten er at celle A1 er oppdatert med gjeldende klokkeslett hvert femte sekund. For å stoppe hendelsene, utføre StopClock prosedyren (som avbryter hendelse). Merk at NextTick er en variabel på modulnivå som lagrer tidspunktet for neste arrangement.
Dim NextTick Som DateSub UpdateClock () 'Oppdateringer celle A1 med gjeldende klokkeslett ThisWorkbook.Sheets (1) .Range ("A1") = Time 'Sett opp neste arrangement fem sekunder fra nå NextTick = nå + TIMEVALUE ("0:00:05") Application.OnTime NextTick, "UpdateClock" End SubSub StopClock ()' Opphever OnTime hendelse (stopper klokken) On Error gjenoppta Neste Application.OnTime NextTick, "UpdateClock", vedvarer FalseEnd SubThe OnTime hendelsen selv etter arbeidsboken er lukket. Med andre ord, hvis du lukker arbeidsboken uten å kjøre StopClock prosedyren, vil arbeidsboken gjenåpne seg i fem sekunder (forutsatt at Excel er fortsatt kjører). For å unngå dette, kan du bruke en Workbook_BeforeClose hendelsesprosedyren som inneholder følgende uttalelse:
Ring StopClock

OnTime metoden har ytterligere to argumenter. Hvis du har tenkt å bruke denne metoden, bør du se i hjelpesystemet for fullstendig informasjon.
Hvis du ønsker å se en ganske komplisert program, sjekk ut denne analog klokke søknad. Klokken er faktisk et diagram, og diagrammet oppdateres hvert sekund for å vise klokkeslettet. Ubrukelig, men moro.
En analog-klokke program.
tastetrykk hendelser

Mens du arbeider, Excel konstant overvåker hva du skriver. På grunn av dette, kan du sette ting opp slik at et tastetrykk eller en tastekombinasjon utfører en prosedyre

Her er et eksempel på at reassigns de PgDn og PgUp nøkler.
Sub Setup_OnKey () Application.OnKey "{PgDn } "," PgDn_Sub "Application.OnKey" {PgUp} "," PgUp_Sub "End SubSub PgDn_Sub () On Error Resume Neste ActiveCell.Offset (1, 0) .ActivateEnd SubSub PgUp_Sub () On Error Resume Neste ActiveCell.Offset (- 1, 0) .ActivateEnd Sub

Etter å ha satt opp onkey hendelser ved å utføre Setup_OnKey prosedyren, beveger trykke PgDn deg ned én rad. Trykke PgUp beveger deg opp en rad.

Legg merke til at nøkkelkodene er i klammeparenteser, ikke i parentes. For en fullstendig liste over tastaturkoder, se i hjelpesystemet. Søk etter onkey.

I dette eksempelet On Error Resume Next brukes til å ignorere eventuelle feil som genereres. For eksempel, hvis den aktive cellen er i den første raden, forsøker å bevege seg opp en rekke forårsaker en feil som trygt kan ignoreres. Og hvis et diagram ark er aktiv, det er ingen aktive cellen

Ved å kjøre følgende rutine, du avbryter de onkey hendelser.
Sub Cancel_OnKey () Application.OnKey "{PgDn}" Application.OnKey "{PgUp}" End SubUsing en tom streng som det andre argumentet for onkey metoden gjør ikke
avbryte onkey hendelsen. Snarere, det fører til Excel for å bare ignorere tastetrykk. For eksempel forteller følgende uttalelse Excel til å ignorere Alt + F4. Den prosenttegn representerer Alt-tasten:
Application.OnKey "% {F4}", ""

Selv om du kan bruke onkey metode for å tildele en hurtigtast for å utføre en makro, bør du bruke dialogboksen Makro Alternativer boks for denne oppgaven.
Hvis du lukker arbeidsboken som inneholder koden og la Excel åpen, vil onkey metoden ikke tilbakestilles. Som en konsekvens av dette, vil et trykk på hurtigtasten føre Excel til å åpne filen med makro automatisk. For å hindre at dette skjer, bør du inkludere koden i Workbook_BeforeClose hendelseskode for å nullstille onkey hendelsen. Anmeldelser