За онези от нас, които са разбрали дълбоко ума си VB.NET, пътуването обратно към VB6 може да бъде объркващо пътуване. Използването на таймер във VB6 е така. В същото време добавянето на времеви процеси към вашия код не е очевидно за новите потребители на VBA макроси.
Таймери за начинаещи
кодиране на стоките Word VBA макрос за автоматично пускане на тест, написан в Word, е типична причина за използване на таймер. Друга често срещана причина е да видите колко време отнема отделните части на вашия код, за да можете да работите за оптимизиране на бавните секции. Понякога може да искате да видите дали нещо се случва в приложението, когато компютърът изглежда просто седи там на празен ход, което може да бъде проблем със сигурността. Таймерите могат да направят това.
Стартирайте таймер
Стартирате таймер, като кодирате оператор OnTime. Това изявление е внедрено в Word и Excel, но има различен синтаксис в зависимост от това кой използвате. Синтаксисът за Word е:
изразяване. OnTime (Кога, Име, Толерантност)
Синтаксисът за Excel изглежда така:
изразяване. OnTime (EarliestTime, процедура, LatestTime, Schedule)
И двете имат общ и първи параметър. Вторият параметър е името на друг макрос, който се изпълнява, когато се достигне времето в първия параметър. В действителност, кодирането на това изявление е като създаване на подпрограма за събитие в VB6 или VB.NET термини. Събитието достига времето в първия параметър. Подпрограмата на събитието е вторият параметър.
Това е различно от начина, по който е кодиран във VB6 или VB.NET. От една страна, макросът, посочен във втория параметър, може да бъде във всеки код, който е достъпен. В документ на Word Microsoft препоръчва да го поставите в шаблона за нормален документ. Ако го поставите в друг модул, Microsoft препоръчва да използвате пълния път: Project. Модул. Macro.
Изразът обикновено е обектът Application. В документацията на Word и Excel се посочва, че третият параметър може да анулира изпълнението на макроса на събитието, в случай че диалог или някакъв друг процес не му позволява да се изпълнява в рамките на определено време. В Excel можете да планирате ново време в случай, че това се случи.
Кодирайте макроса на събитието във времето
Този код в Word е за администратора, който иска да покаже известие, че времето за тестване е изтекло и да отпечата резултата от теста.
Публичен под тестOnTime ()
Debug. Печат "Алармата ще изгасне за 10 секунди!"
Debug. Печат ("Преди OnTime:" и сега)
alertTime = Сега + TimeValue ("00:00:10")
Приложение. OnTime предупреждениеTime, „EventMacro“
Debug. Печат ("След OnTime:" и сега)
Край Sub
Sub EventMacro ()
Debug. Печат ("Изпълнение на макрос на събитието:" и сега)
Край Sub
Това води до следното съдържание в непосредствения прозорец:
Алармата ще изгасне след 10 секунди!
Преди OnTime: 25.12.2000 г. 19:41:23
След OnTime: 25.12.2000 г. 19:41:23
Изпълнение на макрос на събитието: 27.02.2010 г. 19:41:33
Опция за други приложения на Office
Други приложения на Office не прилагат OnTime. За тях имате няколко възможности за избор. Първо, можете да използвате функцията Таймер, която просто връща броя секунди след полунощ на вашия компютър и прави ли вашата математика или можете да използвате Windows API обаждания. Използването на Windows API обаждания има предимството да бъде по-прецизно от Таймера. Ето една рутина, предложена от Microsoft, която прави трика:
Частна декларираща функция getFrequency Lib "kernel32" _
Псевдоним „QueryPerformanceFrequency“ (cyFrequency като валута) As Long
Частна декларация функция getTickCount Lib "kernel32" _
Псевдоним „QueryPerformanceCounter“ (cyTickCount като валута) Както дълго
Sub TestTimeAPICalls ()
Dim dTime като двойно
dTime = MicroTimer
Dim StartTime като единичен
StartTime = Таймер
За i = 1 до 10000000
Dim j като двойно
j = Sqr (i)
Следващия
Debug. Печат ("MicroTimer Времето беше:" & MicroTimer - dTime)
Край Sub
Функция MicroTimer () като двойна
'
„Връща секунди.
'
Dim cyTicks1 като валута
Статична цифрена честота като валута
'
MicroTimer = 0
„Вземете честота.
Ако cyFrequency = 0 Тогава getFrequency cyFrequency
- Вземете кърлежи.
getTickCount cyTicks1
„Секунди
Ако cyFrequency тогава MicroTimer = cyTicks1 / cyFrequency
Крайна функция