For dem af os, der har vores sind dybt ind i VB.NET, rejsen tilbage til VB6 kan være en forvirrende tur. At bruge en timer i VB6 er sådan. Samtidig er det ikke klart for nye brugere af VBA-makroer at tilføje tidsbestemte processer til din kode.
Timere til nybegynder
Coding en Word VBA-makro til automatisk at time en test, der blev skrevet i Word, er en typisk grund til at bruge en timer. En anden almindelig grund er at se, hvor meget tid der tages af forskellige dele af din kode, så du kan arbejde på at optimere de langsomme sektioner. Nogle gange kan det være en god ide at se, om der sker noget i applikationen, når computeren ser ud til bare at sidde der i tomgang, hvilket kan være et sikkerhedsproblem. Timere kan gøre det.
Start en timer
Du starter en timer ved at kode en OnTime-erklæring. Denne erklæring er implementeret i Word og Excel, men den har forskellige syntaks, afhængigt af hvilken du bruger. Syntaks for Word er:
ekspression. OnTime (Hvornår, navn, tolerance)
Syntaks for Excel ser sådan ud:
ekspression. OnTime (tidligste tid, procedure, seneste tid, plan)
Begge har den første og den anden parameter til fælles. Den anden parameter er navnet på en anden makro, der kører, når tiden i den første parameter er nået. I virkeligheden er kodning af denne erklæring som at oprette en underprogrammeringshændelse i VB6- eller VB.NET-termer. Begivenheden når tiden i den første parameter. Hændelsessubutinen er den anden parameter.
Dette er forskelligt fra den måde, det er kodet i VB6 eller VB.NET. For det første kan den i den anden parameter nævnte makro være i en hvilken som helst kode, der er tilgængelig. I et Word-dokument anbefaler Microsoft at placere det i den normale dokumentskabelon. Hvis du lægger det i et andet modul, anbefaler Microsoft at bruge den fulde sti: Project. Modul. Makro.
Udtrykket er normalt applikationsobjektet. Word- og Excel-dokumentationen angiver, at den tredje parameter kan annullere udførelsen af hændelsesmakroen i tilfælde af at en dialog eller en anden proces forhindrer den i at køre inden for et bestemt tidsrum. I Excel kan du planlægge en ny tid, hvis dette sker.
Kod Time Macro
Denne kode i Word er til den administrator, der ønsker at få vist en meddelelse om, at testtiden er udløbet og udskriver resultatet af testen.
Public Sub TestOnTime ()
Fejlfinde. Udskriv "Alarmen slukker om 10 sekunder!"
Fejlfinde. Udskriv ("Før tid:" & nu)
alarmTime = Nu + TimeValue ("00:00:10")
Ansøgning. OnTime alarmTime, "EventMacro"
Fejlfinde. Udskriv ("After OnTime:" & Now)
Afslut under
Sub EventMacro ()
Fejlfinde. Print ("Eksekverende begivenhedsmakro:" og nu)
Afslut under
Dette resulterer i følgende indhold i det umiddelbare vindue:
Alarmen slukker om 10 sekunder!
Før OnTime: 12/25/2000 19:41:23 PM
Efter OnTime: 12/25/2000 19:41:23 PM
Udførelse af begivenhedsmakro: 27-02-2010 19:41:33
Mulighed for andre Office-apps
Andre Office-applikationer implementerer ikke OnTime. For dem har du flere valg. Først kan du bruge Timer-funktionen, som ganske enkelt returnerer antallet af sekunder siden midnat på din pc og gør din egen matematik, eller du kan bruge Windows API-opkald. Brug af Windows API-opkald har fordelen ved at være mere præcis end Timer. Her er en rutine foreslået af Microsoft, der gør susen:
Privat erklære funktion getFrequency Lib "kernel32" _
Alias "QueryPerformanceFrequency" (cyFrequency As Currency) så længe
Privat erklæringsfunktion getTickCount Lib "kernel32" _
Alias "QueryPerformanceCounter" (cyTickCount som valuta) så længe
Sub TestTimeAPICalls ()
Dim dTime som dobbelt
dTime = MicroTimer
Dim StartTime som enkelt
StartTime = Timer
For i = 1 til 10000000
Dim j som dobbelt
j = Sqr (i)
Næste
Fejlfinde. Udskriv ("MicroTimer Time taken was:" & MicroTimer - dTime)
Afslut under
Funktion MicroTimer () Som dobbelt
'
'Returnerer sekunder.
'
Dim cyTicks1 som valuta
Statisk cyFrekvens som valuta
'
MicroTimer = 0
'Få frekvens.
Hvis cyFrequency = 0 Derefter getFrequency cyFrequency
"Få kryds.
getTickCount cyTicks1
'Sekunder
Hvis cyFrequency Så MicroTimer = cyTicks1 / cyFrequency
Slut Funktion