For de av oss som har vårt sinn innerst inne VB.NET, reisen tilbake til VB6 kan være en forvirrende tur. Å bruke en tidtaker i VB6 er sånn. Samtidig er det ikke klart for nye brukere av VBA-makroer å legge til tidsbestemte prosesser i koden din.
Tidtakere for nybegynnere
Coding en Word VBA-makro for å automatisk time en test som ble skrevet i Word, er en typisk årsak til å bruke en timer. En annen vanlig årsak er å se hvor mye tid du bruker på forskjellige deler av koden, slik at du kan jobbe med å optimalisere de langsomme delene. Noen ganger kan det være lurt å se om det skjer noe i applikasjonen når datamaskinen ser ut til å bare sitte der inaktiv, noe som kan være et sikkerhetsproblem. Timere kan gjøre det.
Start en tidtaker
Du starter en timer ved å kode en OnTime-setning. Denne uttalelsen er implementert i Word og Excel, men den har forskjellige syntaks, avhengig av hvilken du bruker. Syntaks for Word er:
uttrykk. OnTime (Når, navn, toleranse)
Syntaks for Excel ser slik ut:
uttrykk. OnTime (tidligste tid, prosedyre, siste tid, plan)
Begge har den første og andre parameter til felles. Den andre parameteren er navnet på en annen makro som kjører når tiden i den første parameteren er nådd. I virkeligheten er koding av denne uttalelsen som å lage en subroutine av hendelser i VB6- eller VB.NET-termer. Hendelsen når tiden i den første parameteren. Hendelsens subrutine er den andre parameteren.
Dette er forskjellig fra måten det er kodet i VB6 eller VB.NET. For det første kan makroen som heter i den andre parameteren være i hvilken som helst kode som er tilgjengelig. I et Word-dokument anbefaler Microsoft å legge det inn i Normal dokumentmal. Hvis du legger den i en annen modul, anbefaler Microsoft å bruke hele banen: Project. Modul. Makro.
Uttrykket er vanligvis applikasjonsobjektet. Word- og Excel-dokumentasjonen sier at den tredje parameteren kan avbryte utførelsen av hendelsesmakroen i tilfelle en dialog eller annen prosess forhindrer den i å løpe innen en viss tid. I Excel kan du planlegge en ny tid i tilfelle det skulle skje.
Koder tidshendelsesmakroen
Denne koden i Word er for administratoren som ønsker å vise et varsel om at testtiden er utløpt og skrive ut resultatet av testen.
Public Sub TestOnTime ()
Debug. Skriv ut "Alarmen går på 10 sekunder!"
Debug. Skriv ut ("Før klokkeslett:" og nå)
alertTime = Nå + TimeValue ("00:00:10")
Applikasjon. OnTime alertTime, "EventMacro"
Debug. Skriv ut ("After OnTime:" & Now)
Slutt sub
Sub EventMacro ()
Debug. Skriv ut ("Utføre hendelsesmakro:" og nå)
Slutt sub
Dette resulterer i følgende innhold i det umiddelbare vinduet:
Alarmen går på 10 sekunder!
Før klokkeslett: 12/25/2000 19:41:23
Etter OnTime: 12/25/2000 19:41:23 PM
Utføre hendelse Makro: 27.11.2010 19:41:33
Alternativ for andre Office-apper
Andre Office-applikasjoner implementerer ikke OnTime. For de har du flere valg. Først kan du bruke Timer-funksjonen, som ganske enkelt returnerer antall sekunder siden midnatt på PC-en, og gjør din egen matematikk, eller du kan bruke Windows API-anrop. Å bruke Windows API-samtaler har fordelen av å være mer presis enn Timer. Her er en rutine foreslått av Microsoft som gjør susen:
Privat erklære funksjon getFrequency Lib "kernel32" _
Alias "QueryPerformanceFrequency" (cyFrequency As Currency) så lenge
Privat erklæringsfunksjon getTickCount Lib "kernel32" _
Alias "QueryPerformanceCounter" (cyTickCount As Currency) så lenge
Sub TestTimeAPICalls ()
Dim dTime som dobbelt
dTime = MicroTimer
Dim StartTime Som singel
StartTime = Timer
For i = 1 til 10000000
Dim j As Double
j = kvadrat (i)
neste
Debug. Print ("MicroTimer Time taken was:" & MicroTimer - dTime)
Slutt sub
Funksjon MicroTimer () som dobbel
'
Returnerer sekunder.
'
Dim cyTicks1 som valuta
Statisk cyFrekvens som valuta
'
MicroTimer = 0
'Få frekvens.
Hvis cyFrequency = 0, så getFrequency cyFrequency
'Få flått.
getTickCount cyTicks1
'Sekunder
Hvis cyFrequency Så MicroTimer = cyTicks1 / cyFrequency
Sluttfunksjon