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

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

Функцията VBA Sleep е функция на Windows, налична под DLL файлове на windows, която се използва за спиране или пауза на макропроцедурата да се изпълнява за определен период от време, след като определено количество от нас може да възобнови програмата.

Има ситуации, в които трябва да поставим на пауза процеса на изпълнение на макроса, за да изпълним други набори от задачи. Други набори от задачи могат да бъдат част от нашето кодиране или част от друга макро процедура, или могат да бъдат въведени за текущия макрос на Excel. Как можете да поставите на пауза програмата, когато тя работи? Можем да поставим на пауза кода на процедурата за известно време, посочен от потребителя, и след това определено количество можем да възобновим програмата. Можем да направим това във VBA, като използваме функцията SLEEP.

Какво прави функцията за сън на VBA?

SLEEP, както самото име казва, „заспиване за известно време“, „почивка за известно време“, „пауза за известно време“, почивка за известно време и т.н. … Функцията за заспиване позволява на потребителите да спират нашия макро код за милисекунди . Използвайки това, можем да забавим процеса на макрокода.

Ако смятате, че имаме вградена функция, наречена SLEEP, тогава грешите, защото във VBA няма такава функция. По-скоро имаме функция, наречена Sleep като функция на windows. Чрез въвеждане на специален набор от кодове всъщност можем да извикаме тази функция във VBA. Всъщност това е функция, присъстваща в Windows DLL файлове, така че трябва да декларираме номенклатурата на API преди началото на подпрограмата във VBA.

По-долу е VBA кодът.

Код:

#If VBA7 Тогава Public Declare 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 милисекунди.

Пример # 1

След като API кодът е поставен преди началото на процедурата Sub, създайте име на макрос.

Код:

#Sub Sleep_Example1 () End Sub

Декларирайте две променливи като низ.

Код:

Затъмняване на началното време като низ Затъмняване на крайното време като низ

За променливата 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) End 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

Сега две променливи StartTime и EndTime ще съдържат началното и крайното време на макроса. Изпълнете този макрос; отначало ще видим началния час на макроса, т.е. текущото време във вашата система.

Щракнете върху OK. Ще спи за 10 секунди. Можете да видите символа на буфера.

After 10 seconds, it will start to resume the code so it will show the end time, i.e., after waiting for 10 seconds, what’s the current time now.

Now you can see macro started at 10:54:14 and ended at 10:54:24, i.e., Exactly the 10-second difference is there. In those 10 seconds, VBA pause the code running.

Example #2 - Sleep Function in Loops

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 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

Изпълнете този код и трябва да изчакате минимум 30 секунди, за да завършите процеса.

За да проследите точното време, използвайте кода по-долу.

Код:

Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Вашият код започна в" & StartTime k = 1 Do While k <= 10 клетки (k, 1). Стойност = kk = k + 1 Sleep (3000) '1000 милисекунди е 1 секунда, така че 3000 е равно на 3 секунди Loop EndTime = Time MsgBox "Вашият код завършен в" & EndTime End Sub

Този код ще ви покаже 2 кутии за съобщения, първият ще покаже началния час, а вторият ще покаже крайния час.

Забележка: Докато изпълнявате този код, не можете да използвате Excel. Дори ключът за бягство няма да работи.

Интересни статии...