Функции ожидания и сна VBA - Код VBA для паузы / задержки

В этом руководстве будет показано, как приостановить / отложить код с помощью функций ожидания и сна в VBA.

Когда мы создаем большие программы VBA, которые выполняют много вычислений или, возможно, даже вызывают внешнюю программу для запуска, мы можем потребовать, чтобы наш код VBA остановился на определенное время, пока выполняется внешний процесс. VBA предлагает несколько методов для достижения этой цели.

Использование метода Application.Wait

Если нам нужно приостановить выполнение нашего макроса на некоторое время или пока не будет достигнуто указанное время перед выполнением следующего шага, мы можем использовать Application.Wait метод. Это может быть полезно, например, если мы автоматизировали процесс входа на веб-сайт и нам нужно подождать несколько секунд, пока страница загрузится, прежде чем наш макрос продолжит работу.

Подождите 1 секунду

Если включить в макрос следующую строку, его выполнение будет приостановлено примерно на 1 секунду:

1 Application.Wait (Now + TimeValue ("0:00:01"))

Подожди до

В некоторых случаях вам нужно будет подождать до определенного времени. С этой строкой ниже ваш макрос не будет работать до 9 утра:

1 Заявление. Подождите "09:00:00"

Обратите внимание, что Application.Wait не принимает задержки менее 1 секунды.

Программирование на VBA | Генератор кода действительно работает для вас!

Использование метода сна

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

Сон - это функция Windows API, то есть не является частью VBA. Доступ к нему можно получить, используя специальный оператор объявления.

Если вы используете 64-разрядную версию Microsoft Office, вы можете вставить следующий оператор в новый модуль или в начало модуля (не непосредственно в подпрограмме), в котором вы хотите использовать функцию сна:

1 Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal в миллисекундах как LongPtr)

В 32-битной версии используйте эту строку:

1 Public Declare Sub Sleep Lib "kernel32" (ByVal в миллисекундах как LongPtr)

После объявления функции сна у вас есть доступ к ней в подпрограммах следующим образом:

1 Сон 10000

С этой строкой выше ваш макрос будет приостановлен на 10 000 миллисекунд, то есть на 10 секунд.

Использование цикла с событиями Do

Большой недостаток использования методов Wait и Sleep заключается в том, что пользователь не может ничего делать в Excel, ожидая продолжения выполнения макроса. Пользователь мог подумать, что Excel перестал отвечать, и в то время как пользователь может использовать Ctl + Break чтобы прервать выполнение макроса, это лишает смысла ставить паузу в макросе с самого начала.

Чтобы решить эту проблему, мы можем использовать цикл с методом DoEvents.

1234567 Публичный дополнительный тест ()Тусклый я до тех пор, покаДля i = от 1 до 20000Диапазон («A1»). Значение = i.DoEventsДалее яКонец подписки

Теперь, пока Excel выполняет макрос, указанный выше, пользователь может продолжать взаимодействовать с Excel - например, мы можем изменять вкладки или форматировать ячейки - в основном макрос продолжает выполняться, но экран Excel не зависает. Мы могли бы использовать аналогичный цикл для создания функции таймера в Excel и включения DoEvents в том, чтобы разморозить экран во время работы таймера.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave