Použití časovače v makrech MS Office VBA

click fraud protection

Pro ty z nás, kteří mají hluboko v mysli VB.NET, cesta zpět do VB6 může být matoucí výlet. Použití časovače ve VB6 je takové. Současně není přidání nových načasovaných procesů do vašeho kódu zřejmé pro nové uživatele maker VBA.

Časovače pro nováčky

Kódování Typickým důvodem pro použití časovače je makro Word VBA, které automaticky časuje test napsaný v aplikaci Word. Dalším běžným důvodem je zjistit, kolik času zabírají různé části kódu, takže můžete pracovat na optimalizaci pomalých sekcí. Někdy byste mohli chtít zjistit, zda se v aplikaci něco děje, když se zdá, že počítač tam sedí jen nečinně, což může být problém se zabezpečením. Časovače to dokáží.

Spusťte časovač

Časovač spustíte kódováním příkazu OnTime. Tento příkaz je implementován v aplikaci Word a Excel, ale má odlišnou syntaxi podle toho, kterou používáte. Syntaxe pro Word je:

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

Syntaxe aplikace Excel vypadá takto:

výraz. OnTime (EarlyestTime, Procedure, LatestTime, Schedule)

Oba mají společný první a druhý parametr. Druhý parametr je název jiného makra, které se spustí, když je dosaženo času v prvním parametru. Ve skutečnosti je kódování tohoto příkazu jako vytvoření podprogramu události v podmínkách VB6 nebo VB.NET. Událost dosahuje času v prvním parametru. Podprogram události je druhým parametrem.

instagram viewer

To se liší od způsobu, jakým je kódován ve VB6 nebo VB.NET. Pro jednu věc, makro pojmenované v druhém parametru může být v libovolném kódu, který je přístupný. V dokumentu Word společnost Microsoft doporučuje umístit jej do šablony Normální dokument. Pokud ji vložíte do jiného modulu, společnost Microsoft doporučuje použít úplnou cestu: Projekt. Modul. Makro.

Výraz je obvykle objekt Application. Dokumentace Word a Excel uvádí, že třetí parametr může zrušit provádění makra události v případě, že dialog nebo nějaký jiný proces zabrání jeho spuštění v určité době. V Excelu můžete naplánovat nový čas pro případ, že k tomu dojde.

Kódování makra časové události

Tento kód v aplikaci Word je určen pro správce, který chce zobrazit upozornění, že vypršela doba testování a vytisknout výsledek testu.

Public Sub TestOnTime ()
Ladit. Tisk "Budík zmizí za 10 sekund!"
Ladit. Tisk („Before OnTime:“ & Now)
alertTime = Now + TimeValue ("00:00:10")
Aplikace. OnTime alertTime, „EventMacro“
Ladit. Tisk („After OnTime:“ & Now)
End Sub
Sub EventMacro ()
Ladit. Tisk („Provedení makra události:“ a nyní)
End Sub

Výsledkem je následující obsah v okamžitém okně:

Budík se vypne za 10 sekund!
Před dobou OnTime: 12/25/2000 7:41:23 PM
Po OnTime: 12/25/2000 7:41:23 PM
Provedení makra události: 27/27/2010 19:41:33 PM

Možnost pro jiné kancelářské aplikace

Jiné kancelářské aplikace implementují OnTime. Pro ně máte několik možností. Nejprve můžete použít funkci časovače, která jednoduše vrátí počet sekund od půlnoci na vašem PC a provede vlastní matematiku, nebo můžete použít volání API systému Windows. Použití volání rozhraní Windows API má výhodu v tom, že jsou přesnější než časovač. Zde je rutina navržená společností Microsoft, která dělá tento trik:

Funkce soukromého prohlášení getFrequency Lib "kernel32" _
Alias ​​"QueryPerformanceFrequency" (cyFrequency As Currency) Tak dlouho
Funkce soukromého prohlášení getTickCount Lib "kernel32" _
Alias ​​"QueryPerformanceCounter" (cyTickCount jako měna) tak dlouho
Sub TestTimeAPICalls ()
Dim dTime As Double
dTime = MicroTimer
Dim StartTime jako Single
StartTime = Časovač
Pro i = 1 až 10000000
Dim j jako Double
j = Sqr (i)
další
Ladit. Tisk ("Doba MicroTimer byla:" & MicroTimer - dTime)
End Sub
Funkce MicroTimer () jako Double
'
„Vrací se vteřiny.
'
Dim cyTicks1 jako měna
Statická cyklická frekvence jako měna
'
MicroTimer = 0
"Získejte frekvenci."
Pokud cyFrequency = 0 Pak getFrequency cyFrequency
"Získejte klíšťata."
getTickCount cyTicks1
"Sekundy."
If cyFrequency Then MicroTimer = cyTicks1 / cyFrequency
Ukončit funkci

instagram story viewer