Функция сна в Excel VBA для приостановки макрокода

Функция сна Excel VBA

Функция VBA Sleep - это функция Windows, присутствующая в файлах DLL Windows, которая используется для остановки или приостановки выполнения макрос-процедуры в течение определенного времени после этого определенного количества времени, когда мы можем возобновить программу.

Бывают ситуации, когда нам нужно приостановить процесс выполнения макроса для выполнения других наборов задач. Другие наборы задач могут быть частью нашего кода или частью другой макропроцедуры, или они могут входить в текущий макрос Excel. Как можно приостановить программу, когда она запущена? Мы можем приостановить код процедуры на некоторое время, указанное пользователем, и после этого определенного времени мы можем возобновить программу. Мы можем сделать это в VBA, используя функцию SLEEP.

Что делает функция сна VBA?

SLEEP, поскольку само название говорит «спать в течение некоторого времени», «отдыхать в течение некоторого времени», «пауза на время», перерыв на некоторое время »и т. Д. Функция сна позволяет пользователям приостанавливать наш код макроса на несколько миллисекунд. Используя это, мы можем отложить процесс макрокода.

Если вы думаете, что у нас есть встроенная функция под названием SLEEP, то вы ошибаетесь, потому что в VBA такой функции нет, а у нас есть функция под названием Sleep как функция Windows. Введя специальный набор кода, мы действительно можем вызвать эту функцию в VBA. Фактически, это функция, присутствующая в файлах DLL Windows, поэтому нам нужно объявить номенклатуру API перед запуском подпрограммы в vba.

Ниже приведен код VBA.

Код:

# Если VBA7, то публично объявить PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Для 64-битных версий Excel # Остальное публично объявить Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Для 32-битных версий Excel # End If 

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

пример

Прежде чем я покажу вам способ написания кода, позвольте мне рассказать вам немного больше о функции сна. Это задерживает процесс в миллисекундах. Таким образом, 1 секунда равна 1000 миллисекунд, если вы хотите сделать паузу на 10 секунд, она должна быть 10000 миллисекунд.

Вы можете скачать этот шаблон VBA Sleep Excel здесь - Шаблон VBA Sleep Excel

Пример # 1

После вставки кода API перед началом процедуры Sub создайте имя макроса.

Код:

# Sub Sleep_Example1 () End Sub 

Объявите две переменные как строку.

Код:

 Dim StartTime As String Dim EndTime As String 

Для переменной StartTime присвойте значение функции TIME. Примечание: функция TIME в excel возвращает текущее время.

Код:

StartTime = Время

Теперь мы отобразим это сообщение в окне сообщений VBA.

Код:

StartTime = Время MsgBox StartTime

Теперь мы приостановим код на 10 секунд, используя функцию сна. Как я уже сказал, он приостанавливает код в миллисекундах, поэтому для паузы на 10 секунд нам нужно использовать 10000 миллисекунд.

Код:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) Конец Sub 

Теперь используйте вторую переменную EndTime и назначьте текущее время.

Код:

 Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub 

Теперь две переменных время_запуск и EndTime проведут макросъемки времени начала и время окончания. Запустите этот макрос, сначала мы увидим время запуска макроса, то есть текущее время в вашей системе.

Нажмите ОК, он перейдет в спящий режим на 10 секунд. Вы можете увидеть символ буфера.

Через 10 секунд он начнет возобновлять код, поэтому он покажет время окончания, то есть после 10 секунд ожидания, какое сейчас текущее время.

Теперь вы можете видеть, что макрос начался в 10:54:14 и закончился в 10:54:24, т.е. есть разница в 10 секунд. В эти 10 секунд VBA приостанавливает выполнение кода.

Пример # 2 - Функция сна в циклах

Сон лучше всего использовать с циклами в VBA. Например, я хочу вставить серийные номера от 1 до 10 с помощью цикла Do while в VBA.

После вставки одного числа мой код должен подождать 3 секунды, поэтому, когда цикл выполняется 10 раз, в целом должно быть 30 секунд.

Код:

 Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Cells (k, 1). Value = kk = k + 1 Sleep (3000) '1000 миллисекунд это 1 секунда, поэтому 3000 равно 3 секундам Окончание цикла Sub 

Запустите этот код, и вам нужно подождать не менее 30 секунд, чтобы завершить процесс.

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

Код:

 Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox «Your Code Started at» & StartTime k = 1 Do While k <= 10 Cells (k, 1). Value = kk = k + 1 Sleep (3000) '1000 миллисекунд составляет 1 секунду, поэтому 3000 равны 3 секундам Loop EndTime = Time MsgBox «Ваш код завершен в» & EndTime End Sub 

Этот код отобразит вам 2 окна сообщений, первое покажет время начала, а второе - время окончания.

Примечание: во время выполнения этого кода вы не можете использовать excel, даже клавиша escape не будет работать.