Uporaba časovnika v makrih Office VBA

Kodiranje makra VBA za dodajanje časovnika vaši programski opremi

Štoparica, ki se pojavlja na zaslonu prenosnega računalnika

Dimitri Otis/Digital Vision/Getty Images





Za tiste med nami, ki smo globoko v mislih VB.NET , pot nazaj v VB6 je lahko zmedeno potovanje. Uporaba časovnika v VB6 je taka. Hkrati dodajanje časovno določenih procesov vaši kodi novim uporabnikom makrov VBA ni očitno.

Časovniki za novince

KodiranjeWordov makro VBA za samodejno merjenje časa preizkusa, ki je bil napisan v Wordu, je tipičen razlog za uporabo časovnika. Drug pogost razlog je, da vidite, koliko časa vzamejo različni deli vaše kode, da lahko delate na optimizaciji počasnih odsekov. Včasih boste morda želeli preveriti, ali se kaj dogaja v aplikaciji, ko se zdi, da računalnik samo miruje, kar je lahko varnostna težava. To zmorejo časovniki.



Zaženite časovnik

Časovnik zaženete tako, da kodirate stavek OnTime. Ta stavek je implementiran v Wordu in Excelu, vendar ima drugačno sintakso, odvisno od tega, katero uporabljate. Sintaksa za Word je:

izraz.OnTime(kdaj, ime, toleranca)



Sintaksa za Excel izgleda takole:

izraz.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

Oba imata skupen prvi in ​​drugi parameter. Drugi parameter je ime drugega makra, ki se zažene, ko je dosežen čas v prvem parametru. Dejansko je kodiranje tega stavka kot ustvarjanje podprograma dogodka v smislu VB6 ali VB.NET. Dogodek dosega čas v prvem parametru. Podprogram dogodka je drugi parameter.

To se razlikuje od načina kodiranja v VB6 ali VB.NET. Prvič, makro, imenovan v drugem parametru, je lahko v kateri koli kodi, ki je dostopna. V dokumentu Word Microsoft priporoča, da ga postavite v predlogo dokumenta Normal. Če ga postavite v drug modul, Microsoft priporoča uporabo celotne poti: Project.Module.Macro.



Izraz je običajno objekt aplikacije. Dokumentacija Worda in Excela navaja, da lahko tretji parameter prekliče izvajanje makra dogodka, če pogovorno okno ali kakšen drug proces prepreči njegovo izvajanje v določenem času. V Excelu lahko načrtujete nov čas, če se to zgodi.

Kodirajte makro časovnega dogodka

Ta koda v Wordu je za skrbnika, ki želi prikazati obvestilo, da je čas testiranja potekel in natisniti rezultat testa.



Javni Sub TestOnTime()
Debug.Print 'Alarm se bo oglasil čez 10 sekund!'
Debug.Print ('Before OnTime: ' & Now)
alertTime = Zdaj + TimeValue('00:00:10')
Application.OnTime alertTime, 'EventMacro'
Debug.Print ('After OnTime: ' & Now)
End Sub
SubEventMacro()
Debug.Print ('Izvajanje makra dogodka: ' & zdaj)
End Sub

Posledica tega je naslednja vsebina v takojšnjem oknu:



Alarm se bo oglasil v 10 sekundah!
Pred vklopom: 25.12.2000 19:41:23
Po vklopu: 25.12.2000 19:41:23
Izvajanje makra dogodka: 27. 2. 2010 19:41:33

Možnost za druge Officeove aplikacije

Druge Officeove aplikacije ne izvajajo OnTime. Za te imate več možnosti. Prvič, lahko uporabite funkcijo Timer, ki preprosto vrne število sekund od polnoči na vašem računalniku in naredi lastno matematiko, ali pa uporabite klice Windows API. Uporaba klicev Windows API ima to prednost, da je natančnejša od časovnika. Tu je rutina, ki jo je predlagal Microsoft in ki deluje:



Funkcija zasebne deklaracije getFrequency Lib 'kernel32' _
Vzdevek 'QueryPerformanceFrequency' (cyFrequency kot valuta) tako dolgo
Funkcija zasebne deklaracije getTickCount Lib 'kernel32' _
Vzdevek 'QueryPerformanceCounter' (cyTickCount kot valuta) kot dolgo
Sub TestTimeAPICalls()
Dim dTime As Double
dČas = MicroTimer
Dim StartTime As Single
Začetni čas = ure
Za i = 1 do 10000000
Dim j kot dvojno
j = Sqr(i)
Naslednji
Debug.Print ('Čas MicroTimer je bil: ' & MicroTimer - dTime)
End Sub

Funkcija MicroTimer() kot Double
'
' Vrne sekunde.
'
Dim cyTicks1 Kot valuta
Statična frekvenca kot valuta
'
MicroTimer = 0
' Pridobite frekvenco.
Če je cyFrequency = 0, potem getFrequency cyFrequency
' Dobi klopi.
getTickCount cyTicks1
'Sekund
Če je cyFrequency, potem je MicroTimer = cyTicks1 / cyFrequency
Končna funkcija