Функции за изчакване и сън на VBA - VBA код за пауза / забавяне

Този урок ще покаже как да поставите на пауза / забавяне кода с помощта на функциите Wait и Sleep във VBA.

Когато създаваме големи VBA програми, които извършват много изчисления, или може би дори извикваме външна програма за изпълнение, може да изискаме нашия VBA код да спре да работи за определен период от време, докато протича външният процес. VBA има няколко налични метода за постигане на това.

Използване на метод Application.Wait

Ако трябва да спрем работата на нашия макрос за известно време или докато не бъде достигнато определено време, преди да изпълним следващата стъпка, можем да използваме Приложение. Изчакайте метод. Това може да бъде полезно например, ако сме автоматизирали процеса на влизане в уебсайт и трябва да изчакаме няколко секунди, докато страницата се зареди, преди нашият макрос да продължи да работи.

Изчакайте 1 секунда

Включвайки този ред по -долу във вашия макрос, неговото изпълнение ще бъде спряно за около 1 секунда:

1 Application.Wait (Сега + TimeValue ("0:00:01"))

Изчакай докато

В някои случаи ще трябва да изчакате до определен час. С този ред по -долу вашият макрос няма да продължи преди 9 часа сутринта:

1 Приложение. Изчакайте "09:00:00"

Моля, обърнете внимание, че Приложение. Изчакайте не приема закъснения за по -малко от 1 секунда.

VBA програмиране | Code Generator работи за вас!

Използване на метода на сън

Ако имате нужда от по -прецизен начин за пауза на вашия макрос, можете да използвате метода Sleep.

Сънят е функция на Windows API, тоест не е част от VBA. Той може да бъде достъпен с помощта на специална декларация.

Ако използвате 64-битовата версия на Microsoft Office, можете да вмъкнете следното изявление в нов модул или в началото на модула (не директно в подпрограмата), в който искате да използвате функцията Sleep:

1 Публично обявете PtrSafe Sub Sleep Lib "kernel32" (ByVal милисекунди като LongPtr)

С 32-битова версия използвайте този ред:

1 Публично декларирайте Sub Sleep Lib "kernel32" (ByVal милисекунди като LongPtr)

След като декларирате функцията Sleep, имате достъп до нея във вашите подпрограми по следния начин:

1 Спи 10000

С този ред над вашия макрос ще бъде поставен на пауза за 10 000 милисекунди, тоест 10 секунди.

Използване на цикъл с Do Events

Големият недостатък на използването на методите за изчакване и заспиване е, че потребителят не може да направи нищо в Excel, докато чака продължаването на макроса. Потребителят може да си помисли, че Excel е спрял да реагира и докато потребителят може да използва Ctl+Break за да прекъснете макроса, това нарушава целта за поставяне на пауза в макроса за начало.

За да преодолеем този проблем, можем да използваме цикъл с метод, наречен DoEvents.

1234567 Публичен подтест ()Dim i As LongЗа i = 1 до 20000Обхват (“A1”). Стойност = iDoEventsСледва iEnd Sub

Сега, докато Excel изпълнява макроса по -горе, потребителят може да продължи да взаимодейства с Excel - можем да променяме раздели или да форматираме клетки например - основно, макросът продължава да се изпълнява, но екранът на Excel не е замразен. Можем да използваме подобен цикъл, за да създадем функция за таймер в Excel и да включим DoEvents метод за освобождаване на екрана, докато таймерът работи.

Така ще помогнете за развитието на сайта, сподели с приятелите си

wave wave wave wave wave