На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! `
Не забудьте заглянуть в VB6 FAQ, так как большая часть VB-примеров актуальна и для VBA-раздела ;)
Модераторы: Old Bat, MIF
  
    > Запуск нескольких таймеров
      EXCEL
      С помощь функции OnTime возможен запуск процедуры через указанный интервал времени
      Например, запускаем процедуру "my_Procedure" через 15 сек.
      ExpandedWrap disabled
        Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"

      Запускаем процедуру "my_Procedure" в 17.00
      ExpandedWrap disabled
        Application.OnTime TimeValue("17:00:00"), "my_Procedure"

      Возможен запуск нескольких таймеров, при необходимости возможна отмена (обратите внимание на последний параметр):
      ExpandedWrap disabled
        Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
            Procedure:="my_Procedure", Schedule:=False

      Если необходим постоянный вызов процедуры "my_Procedure" через 15 сек., то поместите 1 пример в тело процедуры "my_Procedure"

      WORD

      WORD может работать только с одним таймером, т.е. в данном примере
      ExpandedWrap disabled
        Application.OnTime When:="15:55:00", Name:="Macro1"
        Application.OnTime When:="15:56:00", Name:="Macro2"

      отработает только второй таймер

      ACCESS

      На форму ACCESS можно «повесить» один таймер.
      Событие «Таймер» (Timer) возникает регулярно через интервал времени, заданный в значении свойства формы Интервал таймера (TimerInterval).

      ----------------------------------------------------------

      Если все же необходимо организовать несколько таймеров, то вопрос можно решить с помощью API-функций timeSetEvent и timeKillEvent
      ExpandedWrap disabled
         
        Public Declare Function timeKillEvent Lib "winmm.dll" (ByVal uID As Long) As Long
        Public Declare Function timeSetEvent Lib "winmm.dll" (ByVal uDelay As Long, ByVal uResolution As Long, ByVal lpFunction As Long, ByVal dwUser As Long, ByVal uFlags As Long) As Long
         
        Public Const TIME_ONESHOT = 0
        Public Const TIME_PERIODIC = 1
        Public Const TIME_CALLBACK_EVENT_PULSE = &H20  
        Public Const TIME_CALLBACK_EVENT_SET = &H10  
        Public Const TIME_CALLBACK_FUNCTION = &H0  
         
        Public VBTimer As Long, MMTimer As Long
        Public hMMTimer As Long


      ExpandedWrap disabled
        '   Вызываем функцию TimerProc через каждые 500 мс.
            hMMTimer = timeSetEvent(500, 0, AddressOf TimerProc, 0, TIME_PERIODIC)

      Обратите внимание: в качестве третьего параметра передается адрес Функции TimerProc с помощью модификатора AddressOf (Впервые появился в MS OFFICE2000)

      Обратите внимание: функция timeSetEvent и CallBack-функция TimerProc должны обязательно находиться в разных модулях, количество и тип арументов в TimerProc должны совпадать с количеством и типом арументов в timeSetEvent
      ExpandedWrap disabled
        Public Function TimerProc(ByVal uID As Long, _
                                  ByVal uMsg As Long, _
                                  ByVal dwUser As Long, _
                                  ByVal dw1 As Long, _
                                  ByVal dw2 As Long) As Long
        'через указанный временной интервал показываем
        'процент вертикального скроллинга в строке состояния
        StatusBar  = ActiveWindow.VerticalPercentScrolled
        DoEvents
        TimerProc = 0
        End Function


      В нужный момент – останавливаем таймер
      ExpandedWrap disabled
        timeKillEvent hMMTimer

        Класс для запуска нескольких таймеров в форме Access
        http://hiprog.com/index.php?option=com_content&task=view&id=251661564&Itemid=35
        0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
        0 пользователей:


        Рейтинг@Mail.ru
        [ Script execution time: 0,0300 ]   [ 17 queries used ]   [ Generated: 29.03.24, 11:17 GMT ]