Функция за сън на Excel VBA
Функцията VBA Sleep е функция на Windows, налична под Windows DLL файлове, която се използва за спиране или пауза на макропроцедурата да се изпълнява за определен период от време, след като определено количество от нас може да възобнови програмата.
Има ситуации, в които трябва да поставим на пауза процеса на изпълнение на макроса, за да изпълним други набори от задачи. Други набори от задачи могат да бъдат част от нашето кодиране или част от друга макро процедура или могат да бъдат въведени за текущия макрос на Excel. Как можете да поставите на пауза програмата, когато тя работи? Можем да поставим на пауза кода на процедурата за известно време, посочен от потребителя и след това определено количество можем да възобновим програмата. Можем да направим това във VBA, като използваме функцията SLEEP.
Какво прави функцията за сън на VBA?
SLEEP, както самото име казва „сън за известно време“, „почивка за известно време“, „пауза за време“, почивка за известно време “и т.н. Функцията за заспиване позволява на потребителите да поставят на пауза нашия макрокод за милисекунди. Използвайки това, можем да забавим процеса на макрокода.
Ако смятате, че имаме вградена функция, наречена SLEEP, тогава грешите, защото във VBA няма такава функция, а имаме функция, наречена Sleep като функция на windows. Чрез въвеждане на специален набор от код можем действително да извикаме тази функция във VBA. Всъщност това е функция, присъстваща в Windows DLL файлове, така че трябва да декларираме номенклатурата на 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 TemplateПример # 1
След като API кодът е поставен преди началото на процедурата Sub, създайте име на макрос.
Код:
# Sub Sleep_Example1 () Край 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 секунди. Можете да видите символа на буфера.
След 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.