Bruke en timer i Office VBA-makroer
Koding av en VBA-makro for å legge til en tidtaker til programvaren din
Dimitri Otis/Digital Vision/Getty Images
For de av oss som har tankene våre dypt inne VB.NET , reisen tilbake til VB6 kan være en forvirrende tur. Å bruke en timer i VB6 er sånn. Samtidig er det ikke åpenbart å legge til tidsbestemte prosesser i koden din for nye brukere av VBA-makroer.
Tidtakere for nybegynnere
Kodingen Word VBA-makro for å automatisk time en test som ble skrevet i Word er en typisk årsak til å bruke en tidtaker. En annen vanlig årsak er å se hvor mye tid som brukes av ulike deler av koden din, slik at du kan jobbe med å optimalisere de trege delene. Noen ganger vil du kanskje se om noe skjer i applikasjonen når datamaskinen ser ut til å bare sitte der inaktiv, noe som kan være et sikkerhetsproblem. Tidtakere kan gjøre det.
Start en timer
Du starter en timer ved å kode en OnTime-setning. Denne setningen er implementert i Word og Excel, men den har forskjellig syntaks avhengig av hvilken du bruker. Syntaksen for Word er:
expression.OnTime(Når, Navn, Toleranse)
Syntaksen for Excel ser slik ut:
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
Begge har den første og andre parameteren 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. Koding av denne setningen er faktisk som å lage en hendelsessubrutine i VB6- eller VB.NET-termer. Hendelsen når tiden i den første parameteren. Hendelsessubrutinen 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 er navngitt i den andre parameteren være i hvilken som helst kode som er tilgjengelig. I et Word-dokument anbefaler Microsoft å legge det inn i malen for vanlige dokument. Hvis du legger den i en annen modul, anbefaler Microsoft å bruke hele banen: Project.Module.Macro.
Uttrykket er vanligvis Application-objektet. Word- og Excel-dokumentasjonen sier at den tredje parameteren kan avbryte kjøringen av hendelsesmakroen i tilfelle en dialog eller annen prosess hindrer den i å kjøre innen en viss tid. I Excel kan du planlegge et nytt tidspunkt i tilfelle det skulle skje.
Kod 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.Print 'Alarmen vil gå av om 10 sekunder!'
Debug.Print ('Før OnTime: ' & Now)
alertTime = Now + TimeValue('00:00:10')
Application.OnTime alertTime, 'EventMacro'
Debug.Print ('After OnTime: ' & Now)
End Sub
Sub EventMacro()
Debug.Print ('Utfører hendelsesmakro: ' & nå)
End Sub
Dette resulterer i følgende innhold i det umiddelbare vinduet:
Alarmen går om 10 sekunder!
Før OnTime: 25.12.2000 19:41:23
Etter OnTime: 25.12.2000 19:41:23
Utfører hendelsesmakro: 27.02.2010 19:41:33
Alternativ for andre Office-apper
Andre Office-applikasjoner implementerer ikke OnTime. For dem har du flere valg. Først kan du bruke Timer-funksjonen, som ganske enkelt returnerer antall sekunder siden midnatt på PC-en din, og gjør din egen regnestykke, eller du kan bruke Windows API-kall. Å bruke Windows API-anrop har fordelen av å være mer presis enn Timer. Her er en rutine foreslått av Microsoft som gjør susen:
Private Declare-funksjonen getFrequency Lib 'kernel32' _
Alias 'QueryPerformanceFrequency' (cyFrequency As Currency) Så lenge
Private Declare-funksjonen getTickCount Lib 'kernel32' _
Alias 'QueryPerformanceCounter' (cyTickCount som valuta) så lenge
Sub TestTimeAPICalls()
Dim dTime As Double
dTime = MicroTimer
Dim starttid som singel
StartTime = Timer
For i = 1 til 10000000
Dim j As Double
j = Sqr(i)
Neste
Debug.Print ('MicroTimer Time taken was: ' & MicroTimer - dTime)
End Sub
Funksjon MicroTimer() As Double
'
' Returnerer sekunder.
'
Dim cyTicks1 som valuta
Statisk cyFrequency som valuta
'
MicroTimer = 0
' Få frekvens.
Hvis cyFrequency = 0 Så getFrequency cyFrequency
'Få flått.
getTickCount cyTicks1
'Sekunder
Hvis cyFrequency Da er MicroTimer = cyTicks1 / cyFrequency
Avslutt funksjon