Laikmačio naudojimas Office VBA makrokomandose
VBA makrokomandos kodavimas, kad programinė įranga būtų įtraukta į laikmatį

Dimitri Otis / „Digital Vision“ / „Getty Images“.
Tiems iš mūsų, kurie giliai įsigilina VB.NET , kelionė atgal į VB6 gali būti paini kelionė. Laikmačio naudojimas VB6 yra toks. Tuo pačiu metu naujiems VBA makrokomandų vartotojams nėra akivaizdu, kad prie kodo pridedami laiko procesai.
Laikmačiai naujokams
Kodavimas„Word VBA“ makrokomanda, skirta automatiškai nustatyti „Word“ parašyto testo laiką, yra tipiška laikmačio naudojimo priežastis. Kita dažna priežastis – pamatyti, kiek laiko užima skirtingos kodo dalys, kad galėtumėte optimizuoti lėtas dalis. Kartais galbūt norėsite pamatyti, ar programoje kas nors nevyksta, kai atrodo, kad kompiuteris tiesiog neveikia, o tai gali būti saugumo problema. Laikmačiai gali tai padaryti.
Paleiskite laikmatį
Laikmatį paleidžiate užkoduodami OnTime teiginį. Šis teiginys įdiegtas „Word“ ir „Excel“, tačiau jo sintaksė skiriasi priklausomai nuo to, kurią iš jų naudojate. „Word“ sintaksė yra tokia:
išraiška.OnTime (Kada, Vardas, Tolerancija)
„Excel“ sintaksė atrodo taip:
išraiška.OnTime (ankstyviausias laikas, procedūra, vėliausias laikas, tvarkaraštis)
Abu turi bendrą pirmąjį ir antrąjį parametrus. Antrasis parametras yra kitos makrokomandos, kuri vykdoma, kai pasiekiamas pirmame parametre nurodytas laikas, pavadinimas. Iš tikrųjų šio teiginio kodavimas yra tarsi įvykių paprogramės kūrimas VB6 arba VB.NET sąlygomis. Įvykis pasiekia laiką, nurodytą pirmame parametre. Įvykio paprogramė yra antrasis parametras.
Tai skiriasi nuo kodavimo būdo VB6 arba VB.NET. Viena vertus, antrajame parametre pavadinta makrokomanda gali būti bet kuriame pasiekiamame kode. „Word“ dokumente „Microsoft“ rekomenduoja jį įdėti į įprastą dokumento šabloną. Jei įdedate jį į kitą modulį, Microsoft rekomenduoja naudoti visą kelią: Project.Module.Macro.
Išraiška paprastai yra programos objektas. „Word“ ir „Excel“ dokumentacijoje teigiama, kad trečiasis parametras gali atšaukti įvykio makrokomandos vykdymą, jei dialogo langas ar kitas procesas neleidžia jam paleisti per tam tikrą laiką. Programoje „Excel“ galite suplanuoti naują laiką, jei taip nutiktų.
Užkoduokite laiko įvykio makrokomandą
Šis kodas programoje „Word“ skirtas administratoriui, kuris nori parodyti pranešimą, kad pasibaigė testavimo laikas, ir atspausdinti testo rezultatą.
Viešas antrinis bandymo laikas ()
Debug.Spausdinti 'Žadintuvas suges po 10 sekundžių!'
Debug.Print („Prieš įjungtą:“ ir dabar)
alertTime = Dabar + laiko vertė ('00:00:10')
Application.OnTime alertTime, „EventMacro“
Debug.Print ('After OnTime:' ir dabar)
Pabaigos sub
Sub EventMacro()
Debug.Print („vykdoma įvykio makrokomanda:“ ir dabar)
Pabaigos sub
Dėl to tiesioginiame lange pateikiamas toks turinys:
Žadintuvas suges po 10 sekundžių!
Prieš OnTime: 2000-12-25 19:41:23
Po OnTime: 2000-12-25 19:41:23
Vykdomas įvykio makrokomandas: 2010-02-27 19:41:33
Kitų „Office“ programų parinktis
Kitos „Office“ programos „OnTime“ neįdiegtos. Tiems, jūs turite keletą pasirinkimų. Pirma, galite naudoti laikmačio funkciją, kuri tiesiog grąžina sekundžių skaičių nuo vidurnakčio jūsų kompiuteryje ir atlieka savo skaičiavimus, arba galite naudoti Windows API skambučius. Naudojant „Windows“ API skambučius, pranašumas yra tas, kad jie yra tikslesni nei laikmatis. Štai „Microsoft“ pasiūlyta rutina, kuri atlieka šį triuką:
Privatus deklaruoti funkciją getFrequency Lib 'kernel32'_
Pseudonimas „QueryPerformanceFrequency“ (cyFrequency As Currency) tol, kol
Privatus deklaruoti funkciją getTickCount Lib 'kernel32'_
Pseudonimas „QueryPerformanceCounter“ (cyTickCount as Currency) tol, kol
Sub TestTimeAPICalls()
Pritemdytas dTime kaip dvigubas
dTime = mikrolaikmatis
Pritemdykite pradžios laiką kaip vieną
Pradžios laikas = valandos
Jei i = 1 iki 10000000
Dim j As Double
j = kvadratas(i)
Kitas
Debug.Print ('MicroTimer laikas buvo: ' & MicroTimer - dTime)
Pabaigos sub
Funkcija MicroTimer() Kaip Double
'
“ Grąžina sekundes.
'
Dim cyTicks1 kaip valiuta
Statinis cyFrequency kaip valiuta
'
MicroTimer = 0
' Gaukite dažnį.
Jei cyFrequency = 0 Tada getFrequency cyFrequency
'Gaukite erkes.
getTickCount cyTicks1
'sekundės
Jei cyFrequency Tada MicroTimer = cyTicks1 / cyFrequency
Pabaigos funkcija