Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Функция Timer (примеры)

    Применение функции Timer в VBA Excel для приостановки выполнения приложений и определения времени работы процедур. Примеры использования.

    Описание функции Timer

    Timer – это функция без аргументов, которая возвращает количество секунд, прошедших после полночи. Значение типа Single.

    На сайте разработчика сказано, что в Windows функция Timer возвращает дробные части секунды. О порядке дробной части там информации нет. Попробуем выяснить это сами, запустив в редакторе VBA Excel подпрограмму со строкой

    Информационное окно с текущем значением функции Timer
    Исходя из результата, отображенного в информационном окне MsgBox, будем считать, что функция Timer возвращает сотые доли секунды. Во время экспериментов с процедурой Vremya из Примера 2 результат вычисления разницы между двумя значениями функции Timer достигал шести знаков после запятой, и один раз – семи.

    Примеры использования в VBA Excel

    Пример 1
    Присвоение значения функции Timer переменной:

    Пример 2
    Код VBA Excel для приостановки приложений:

    • Start – переменная, в которую записывается первоначальное значение таймера.
    • Pause – время в секундах (до сотых значений), на которое следует приостановить программу.

    Функция DoEvents во время выполнения цикла передает управление операционной системе для обработки других событий. По рекомендации разработчиков не следует использовать DoEvents в тех случаях, когда

    • приостановленная процедура может быть запущена повторно из другой части вашего кода;
    • другие приложения могут обратиться к приостановленной процедуре.

    Код для приостановки приложений можно использовать как отдельную подпрограмму, вставляя ее имя с указанием интервала в нужные места других процедур:

    Проверяем работоспособность подпрограммы StopSub:

    Точный или почти точный результат будет только при использовании в качестве аргумента целых секунд, в том числе и в примере кода, предложенного разработчиком.

    Такой способ приостановки приложений можно использовать в VBA Excel при создании бегущей строки.

    Пример 3
    Функцию Timer можно использовать для замера времени работы процедуры. Мы ее уже использовали для определения времени выполнения подпрограммы StopSub:

    Замените MySub на имя вашей подпрограммы и запустите код в редакторе VBA Excel. Информационное окно MsgBox покажет время работы процедуры.


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

    Фразы для контекстного поиска: пауза, задержка, приостановка, задержка выполнения кода.

    3 комментария для “VBA Excel. Функция Timer (примеры)”

    1. Сбитый Лётчик Небосводов

      Здравствуйте, Евгений! Здравствуйте, коллеги!
      Помогите, пожалуйста, разобраться. Положенные сутки в одиночку продумал 🙂
      Задача: в UserForm нужно подсветить контрол SpinButton1 при событии Change, изменив на 2с его фон .BackColor, после 2с вернуть .BackColor на начальный. Код ниже.
      Код не работает в смысле назначения – изменения .BackColor на экране. При этом Debug’и исправно выдают коды будто бы изменённых цветов, и раскомментированный любой MsgBox тоже приводит к искомой покраске контрола.
      Добавление DoEvents: перед Loop тоже приводит к нужной покраске на экране, но возникает дребезг, т.е. срабатыванию Change 2-3 раза при одном нажатии.
      Что в коде не так, и в каком направлении думать, если данный код почему-то не имеет права на существование?

      1. Евгений

        Мои тесты показали, что элемент управления SpinButton ведет себя очень странно. С этим кодом, через несколько кликов, SpinButton начинает срабатывать от наведения на него курсора:

        Не работает SpinButton правильно даже в этом варианте, где изменение цвета происходит в TextBox1:

        1. Сбитый Лётчик Небосводов

          Здравствуйте, Евгений!
          Спасибо за ответ и уделённое время.
          Неожиданной оказалась причина не в неумении писать код, а в ошибках софта.
          После плясок с бубном решил искомую задачу установкой Delay на 5’000 в настройках контрола SpinButton1 (можно и в коде):

          Остался такой бубен: 5’000мс это же 5с; что за задержка, чего задержка аж на 5с решает задачу без какой-либо видимой задержки выполняемого кода; когда с этим бубном плясать нужно в будущих случаях.
          Экспериментировать с настройками Delay не стал, некогда, авось, потом.

    Обсуждение закрыто.