Функция за изчакване на Excel VBA
VBA Wait е вградена функция, използвана за спиране на изпълнението на кода за определен период от време, много прилича на това, което правим в команда за заспиване и за пауза на код, използваме метода application.wait.
Някои от кодовете изискват известно време преди преминаване към следващия ред код, поради други задачи, които трябва да бъдат изпълнени. В тези случаи трябва да спрем изпълнението на кода и да направим пауза за известно време, след което да продължим с изпълнението. Можем да поставим на пауза кода, който да бъде изпълнен по два начина, първият е методът „Sleep“, а вторият метод „Wait“. В по-ранната ни статия обсъдихме метода „VBA Sleep“ за поставяне на пауза на VBA кода.
„Изчакайте“, както казва самото име, той ще съдържа кода на макроса, който трябва да бъде изпълнен в определена времева рамка. Използвайки този метод, трябва да посочим времето, в което нашият код трябва да прави пауза. Примери ще видим по-нататък.
Синтаксисът на функцията WAIT е както следва.
![](https://cdn.know-base.net/3274318/vba_wait_function_how_to_use_excel_vba_wait_method__2.png.webp)
Трябва да споменем колко време нашият код трябва да прави пауза. Както можете да видите в крайна сметка, той казва Boolean. Това означава, че връща резултата като логически стойности, т.е. TRUE или FALSE.
До пристигането на определеното време се казва FALSE и в момента, в който е пристигнал часът, той връща TRUE.
Това е за разлика от функцията SLEEP, защото WAIT е вградена функция, където SLEEP е функция на Windows. Преди да влезем в функцията SLEEP, трябва да споменем кода по-долу в горната част на модула. Но WAIT не изисква това.
Код:
#If VBA7 Тогава Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'за 64-битови системи #Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' За 32-битови системи End End If
Примери за използване на функцията за изчакване на Excel VBA
Пример # 1
Да приемем, че работите в Excel в средата на деня в 14:30:00 и искате вашият код да бъде поставен на пауза, докато времето стане 14:40:00. Можете да използвате кода по-долу.
Код:
Sub Wait_Example1 () Application.Cait "14:40:00" End Sub
![](https://cdn.know-base.net/3274318/vba_wait_function_how_to_use_excel_vba_wait_method__3.png.webp)
Кодът ще спре вашия Excel да работи, докато времето достигне 14:40:00 във вашата операционна система. Предоставянето на време като това е опасно, защото не винаги работим от 14:30:00. Непрекъснато се променя.
Да кажем, когато използвате кода. Искате да изчакате 2 минути, как се позовавате на това в кода си?
Така че, можем да използваме функцията VBA NOW с функция TIME VALUE, за да въведем определеното време от текущото време.
Само за да ви напомня, функцията NOW () връща текущата дата и час според вашата компютърна система. Функцията TIMEVALUE представлява времето от 00:00:00 до 23:59:59, т.е. 23:59:59 PM в 24-часов формат. Той преобразува стойността на низа в стойност във времето.
За пример NOW () + TIMEVALUE (00:02:30) означава Текущо време + 2 минути 30 секунди.
Ако текущото време е 14:25:30, то става 14:28:00.
За да спрете или поставите на пауза изпълнението на вашия код от текущото време до следващите 10 минути, можете да използвате кода по-долу.
Код:
Sub Wait_Example2 () Application.Wait (Now () + TimeValue ("00:10:00")) End Sub
![](https://cdn.know-base.net/3274318/vba_wait_function_how_to_use_excel_vba_wait_method__4.png.webp)
Важно е да използвате функцията NOW () за точна пауза. В противен случай има вероятност работната ви книга на Excel да е на пауза до полунощ. Можем обаче да излезем от метода на пауза по всяко време, като натиснем клавиша Esc или клавиша Break.
Пример # 2
Изчакайте 10 секунди всеки път, когато цикълът се изпълни
Методът на изчакване е добре използван с цикли. Има ситуации, при които може да се наложи да изчакате 10 секунди всеки път, когато цикълът се изпълни. Например погледнете данните по-долу.
![](https://cdn.know-base.net/3274318/vba_wait_function_how_to_use_excel_vba_wait_method__5.png.webp)
За да изчислите Печалба = (Продажби - Разходи), искате да създадете цикъл и след всеки цикъл искате да изчакате 10 секунди, за да проверите дали резултатът е точен или не. Кодът по-долу ще направи това.
Код:
Sub Wait_Example3 () Dim k Като цяло за k = 2 до 9 клетки (k, 4). Стойност = клетки (k, 2) - Клетки (k, 3) Приложение. Изчакайте (Сега () + TimeValue ("00:00 : 10 ")) Следващ k Край Sub
![](https://cdn.know-base.net/3274318/vba_wait_function_how_to_use_excel_vba_wait_method__6.png.webp)
Този код ще изчисли колоната на печалбата ред по ред. След завършване на първия ред, той ще изчака 10 секунди, преди да изчисли следващия ред.
![](https://cdn.know-base.net/3274318/vba_wait_function_how_to_use_excel_vba_wait_method__7.png.webp)
VBA Sleep срещу VBA Изчакайте
VBA SLEEP | VBA ПОЧАКАЙТЕ | |
Това не е вградена функция на VBA, има нужда от специален код за достъп до тази функция. | Това е вградена функция на VBA, не изисква специален код за достъп до тази функция. | |
Сънят изисква милисекунди като времева рамка. | Изчакването изисква редовна времева рамка. | |
Можем да забавим кода за милисекунди. | Можем да забавим само за цели секунди. |