Použitie časovača v makrách MS Office VBA

Pre tých z nás, ktorí majú hlboko v mysli VB.NET, cesta späť do VB6 môže byť mätúci výlet. Používanie časovača vo VB6 je také. Zároveň nie je pre nových používateľov makier VBA zrejmé pridanie načasovaných procesov do vášho kódu.

Časovače pre nováčikov

kódovanie Typickým dôvodom použitia časovača je makro VBA programu Word na automatické načasovanie testu, ktorý bol napísaný v programe Word. Ďalším častým dôvodom je zistiť, koľko času zaberajú rôzne časti kódu, takže môžete pracovať na optimalizácii pomalých úsekov. Niekedy možno budete chcieť zistiť, či sa v aplikácii niečo deje, keď sa zdá, že počítač práve sedí nečinne, čo môže byť bezpečnostný problém. Časovače to dokážu.

Spustite časovač

Časovač spustíte kódovaním príkazu OnTime. Toto vyhlásenie je implementované v programoch Word a Excel, ale má odlišnú syntax v závislosti od toho, ktoré používate. Syntax programu Word je:

výrazom. OnTime (When, Name, Tolerance)

Syntax programu Excel vyzerá takto:

výrazom. OnTime (Najskorší čas, postup, najnovší čas, rozvrh)

instagram viewer

Oba majú spoločný prvý aj druhý parameter. Druhý parameter je názov iného makra, ktoré sa spustí po dosiahnutí času prvého parametra. V skutočnosti je kódovanie tohto príkazu podobné vytvoreniu podprogramu udalostí v podmienkach VB6 alebo VB.NET. Udalosť dosahuje čas v prvom parametri. Podprogram udalosti je druhým parametrom.

Toto sa líši od spôsobu, akým je kódovaný vo VB6 alebo VB.NET. Po prvé, makro pomenované v druhom parametri môže byť v ľubovoľnom prístupnom kóde. V dokumente programu Word spoločnosť Microsoft odporúča vložiť ho do šablóny dokumentu Normal. Ak ho vložíte do iného modulu, spoločnosť Microsoft odporúča použiť úplnú cestu: Project. Module. Makro.

Výraz je zvyčajne objekt Application. V dokumentácii Word a Excel sa uvádza, že tretí parameter môže zrušiť vykonanie makra udalosti v prípade, že dialógové okno alebo iný proces zabráni jeho spusteniu v určitom čase. V programe Excel môžete naplánovať nový čas pre prípad, že sa tak stane.

Kódovanie makra časovej udalosti

Tento kód v programe Word je určený pre administrátora, ktorý chce zobraziť upozornenie o uplynutí času na testovanie a vytlačiť výsledok testu.

Verejné sub TestOnTime ()
Ladenie. Print "Budík sa vypne za 10 sekúnd!"
Ladenie. Tlač („Pred zapnutím:“ a teraz)
alertTime = Now + TimeValue ("00:00:10")
Aplikácie. OnTime alertTime, „EventMacro“
Ladenie. Tlač („After OnTime:“ a teraz)
End Sub
Sub EventMacro ()
Ladenie. Tlač („Vykonávanie makra udalostí:“ a teraz)
End Sub

Výsledkom bude nasledujúci obsah v okamžitom okne:

Budík sa vypne o 10 sekúnd!
Pred dátumom OnTime: 12/25/2000 7:41:23 PM
Po OnTime: 12/25/2000 7:41:23 PM
Vykonávanie makra udalostí: 27. 2. 2010 19:41:33

Možnosť pre ďalšie kancelárske aplikácie

Iné aplikácie balíka Office nevykonávajú OnTime. Pre nich máte niekoľko možností. Najprv môžete použiť funkciu časovača, ktorá jednoducho vráti počet sekúnd od polnoci na vašom počítači a urobí vašu vlastnú matematiku, alebo môžete použiť volania rozhrania Windows API. Výhodou používania hovorov rozhrania Windows API je to, že sú presnejšie ako časovač. Tu je rutina navrhnutá spoločnosťou Microsoft, ktorá robí tento trik:

Funkcia súkromného vyhlásenia getFrequency Lib "kernel32" _
Alias ​​"QueryPerformanceFrequency" (cyFrequency As Currency) Tak dlho
Funkcia súkromného hlásenia getTickCount Lib "kernel32" _
Alias ​​„QueryPerformanceCounter“ (cyTickCount ako mena) tak dlho
Sub TestTimeAPICalls ()
Dim dTime As Double
dTime = MicroTimer
Dim StartTime ako Single
StartTime = Časovač
Pre i = 1 až 10000000
Dim j ako Double
j = Sqr (i)
Ďalšie
Ladenie. Tlač („Čas potrebný na MicroTimer bol:“ a MicroTimer - dTime)
End Sub
Funkcia MicroTimer () ako dvojitá
'
'Vráti sekundy.
'
Dim cyTicks1 ako mena
Statická frekvencia ako mena
'
MicroTimer = 0
„Získajte frekvenciu.
Ak cyFrequency = 0 Potom getFrequency cyFrequency
„Získajte kliešte.
getTickCount cyTicks1
„Sekundy
Ak je CyFrequency Then MicroTimer = cyTicks1 / cyFrequency
Ukončenie funkcie