Používanie časovača v makrách Office VBA
Kódovanie makra VBA na pridanie časovača do vášho softvéru
Dimitri Otis/Digital Vision/Getty Images
Pre tých z nás, ktorí sa hlboko zabávajú VB.NET , cesta späť do VB6 môže byť mätúci výlet. Používanie časovača vo VB6 je podobné. Zároveň pridávanie časovaných procesov do vášho kódu nie je pre nových používateľov makier VBA zrejmé.
Časovače pre nováčikov
Kódovaniemakro Word VBA na automatické načasovanie testu, ktorý bol napísaný vo Worde, je typickým dôvodom na použitie časovača. Ďalším bežným dôvodom je zistiť, koľko času zaberajú rôzne časti vášho kódu, aby ste mohli pracovať na optimalizácii pomalých častí. Niekedy možno budete chcieť zistiť, či sa v aplikácii niečo deje, keď sa zdá, že počítač tam len nečinne sedí, čo môže byť bezpečnostný problém. Časovače to dokážu.
Spustite časovač
Časovač spustíte kódovaním príkazu OnTime. Tento príkaz je implementovaný vo Worde a Exceli, ale má odlišnú syntax v závislosti od toho, ktorý z nich používate. Syntax pre Word je:
výraz.OnTime(Kedy, Meno, Tolerancia)
Syntax pre Excel vyzerá takto:
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)
Oba majú spoločný prvý a druhý parameter. Druhý parameter je názov iného makra, ktoré sa spustí po dosiahnutí času v prvom parametri. V skutočnosti je kódovanie tohto príkazu ako vytvorenie podprogramu udalosti 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 uvedené v druhom parametri môže byť v akomkoľvek kóde, ktorý je prístupný. V dokumente programu Word spoločnosť Microsoft odporúča umiestniť 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.Macro.
Výraz je zvyčajne objekt Application. Dokumentácia Word a Excel 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 do určitého času. V Exceli si môžete naplánovať nový čas pre prípad, že sa to stane.
Kódovanie makra časovej udalosti
Tento kód vo Worde je pre správcu, ktorý chce zobraziť upozornenie, že čas testovania vypršal, a vytlačiť výsledok testu.
Public Sub TestOnTime()
Debug.Print 'Budík sa spustí o 10 sekúnd!'
Debug.Print („Before OnTime:“ & Now)
alertTime = Now + TimeValue('00:00:10')
Application.OnTime alertTime, 'EventMacro'
Debug.Print ('After OnTime:' & Now)
End Sub
Sub EventMacro()
Debug.Print ('Vykonávanie makra udalosti: ' & Now)
End Sub
Výsledkom je nasledujúci obsah v bezprostrednom okne:
Budík sa spustí o 10 sekúnd!
Before OnTime: 25. 12. 2000 19:41:23
After OnTime: 25. 12. 2000 19:41:23
Prebieha spustenie makra udalosti: 27. 2. 2010 19:41:33
Možnosť pre ďalšie aplikácie balíka Office
Iné aplikácie balíka Office neimplementujú OnTime. Pre tých máte niekoľko možností. Najprv môžete použiť funkciu Timer, ktorá jednoducho vráti počet sekúnd od polnoci na vašom PC a urobí si vlastný výpočet, alebo môžete použiť Windows API volania. Používanie volaní rozhrania Windows API má tú výhodu, že je presnejšie ako časovač. Tu je rutina navrhnutá spoločnosťou Microsoft, ktorá robí trik:
Funkcia Private Declare getFrequency Lib 'kernel32' _
Alias 'QueryPerformanceFrequency' (cyFrequency As Currency) tak dlho
Funkcia Private Declare getTickCount Lib 'kernel32' _
Alias 'QueryPerformanceCounter' (cyTickCount ako mena) tak dlho
Sub TestTimeAPICalls()
Dim dTime ako Double
dTime = MicroTimer
Dim StartTime as Single
StartTime = Hodiny
Pre i = 1 až 1 000 000
Dim j As Double
j = Sqr(i)
Ďalšie
Debug.Print ('MicroTimer Timer bol: ' & MicroTimer - dTime)
End Sub
Funkcia MicroTimer() As Double
'
'Vrátenie sekúnd.'
'
Dim cyTicks1 ako mena
Statická cyFrequency As Currency
'
MicroTimer = 0
'Získajte frekvenciu.
Ak cyFrequency = 0, potom getFrequency cyFrequency
'Získajte kliešte.
getTickCount cyTicks1
'Sekundy
If cyFrequency Then MicroTimer = cyTicks1 / cyFrequency
End Function