Функція сну 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 # Else Public Declare 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 () Кінець Sub 

Оголосіть дві змінні як рядок.

Код:

 Приглушити час початку як рядок Приглушити час закінчення як рядок 

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

Код:

StartTime = Час

Тепер ми відобразимо це повідомлення у вікні повідомлень VBA.

Код:

StartTime = Час MsgBox StartTime

Тепер ми призупинимо код на 10 секунд за допомогою функції сну. Як я вже сказав, призупиняє код в мілісекундах, тому для паузи на 10 секунд нам потрібно використовувати 10000 мілісекунд.

Код:

 Sub Sleep_Example1 () Затемнити час початку як рядок Приглушити час закінчення як рядок StartTime = час MsgBox StartTime Sleep (10000) End Sub 

Тепер використовуйте другу змінну EndTime і призначте поточний час.

Код:

 Sub Sleep_Example1 () Приглушити час початку як рядок Приглушити час закінчення як рядок StartTime = час MsgBox StartTime Sleep (10000) EndTime = час MsgBox EndTime End Sub 

Тепер дві змінні StartTime і EndTime містять час початку і закінчення макросу. Запустіть цей макрос, спочатку ми побачимо час початку макросу, тобто поточний час у вашій системі.

Натисніть OK, він буде спати 10 секунд. Ви можете побачити символ буфера.

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

Тепер ви можете бачити, що макрос почався о 10:54:14 і закінчився о 10:54:24, тобто саме 10-секундна різниця є. За ці 10 секунд VBA призупинить запущений код.

Приклад №2 - Функція сну в циклах

Sleep is best used with loops in VBA. For example, I want to insert serial numbers from 1 to 10 using Do while loop in VBA.

After inserting the one number my code should wait for 3 seconds, so when the loop runs for 10 times it should be 30 seconds in total.

Code:

 Sub Sleep_Example2() Dim k As Integer k = 1 Do While k <= 10 Cells(k, 1).Value = k k = k + 1 Sleep (3000) '1000 milliseconds is 1 second so 3000 is equal to 3 seconds Loop End Sub 

Run this code and you have to wait for a minimum of 30 seconds to complete the process.

To track the exact time use the below code.

Code:

 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 = k k = k + 1 Sleep (3000) '1000 milliseonds is 1 second so 3000 is equal to 3 seconds Loop EndTime = Time MsgBox "Your Code Ended at " & EndTime End Sub 

This code will display you 2 message box, the first one will show the starting time and the second one will show the end time.

Note: While running this code, you cannot use excel, even the escape key will not work.