Страницы: 1
RSS
Timer в VBA как в VB
 
Надеюсь будет интересно кому нибудь, значит копался я в интернете и наткнулся на таймер, классная штука подумал я и решил поделиться этой радостью здесь)))  
 
цитирую автора kvakak:  
 
Видимо актуальность данного вопроса уже пропала, но, на всякий случай, приведу работающий код "самодельного" APIшного таймера. Проверял на WindowsXP/OfficeXP. (И до сих пор удивляюсь. что подобный "примитив" сработал.)  
 
Итого: открываем Word/Excel, Alt-F11, вставляем модуль, а него такой код:  
 
Public elpTm As Long  
Public tmrID As Long  
Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long  
Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long  
 
Sub main()  
tmrID = SetTimer(&H0, &H0, 1000, AddressOf tmrPrc)  
End Sub  
 
'Этопришлось вынести в отдельную процедуру,  
'т.к. таймер не желал "убиваться" в таймерной процедуре tmrPrc  
Sub tmrKill()  
KillTimer &H0, tmrID  
End Sub  
 
'Это обработчик таймера - "таймерная" процедура..  
Public Sub tmrPrc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTimer As Long)  
'(Примеры для Word закоментирован)  
   elpTm = elpTm + 1  
'===============Для Word'а  
'With Selection  
'    .InsertAfter Str(elpTm)  
'    .Collapse Direction:=wdCollapseEnd  
'End With  
 
'================Для Excel'а  
ActiveCell.Value = elpTm  
ActiveCell.Offset(1, 0).Select  
If elpTm > 10 Then tmrKill  
End Sub  
 
'Запускать надо main.
 
{quote}{login=The_Prist}{date=13.01.2011 10:27}{thema=}{post}Знаете....лучше все же использовать Applicaton.OnTime и Application.Wait  
Они так же не грузят проц и выполняют те же функции...  
{/post}{/quote}  
Эти методы не работают в параллельном режиме. Метод Wait приостанавливает выполнение всего кода. Метод OnTime всё-таки тормозит весь код.
 
{quote}{login=The_Prist}{date=15.01.2011 03:24}{thema=Re: Re: }{post}{quote} Каким образом тормозит? {/post}{/quote}  
пердоставил бы, да коммерческая тайна. Скажу только, что в файле Excel собирается и обрабатывается информация из 60-ти файлов, в каждом по 6 листов, около 20000 строк, 30 столбцов с различными данными, расчёты проводятся по числам и датам. И всё это выполняется на старом одноядерном процессоре c 512 Mb в Excele 2003. Только не надо говорить, чтобы купили компьютер помощнее, это не я решаю.
 
P.S. Попробуйте на старом комьютере в Excel 2003 в 1000 строк и 10 столбцов вставьте формулу с использованием функции "РАБДЕНЬ" с учётом списка праздников за 3 года и посмотрите как быстро будет обрабатываться файл.
Страницы: 1
Наверх