Funkcja uśpienia programu Excel VBA do wstrzymywania kodu makra

Funkcja uśpienia Excel VBA

Funkcja VBA Sleep to funkcja systemu Windows obecna w plikach DLL systemu Windows, która służy do zatrzymania lub wstrzymania uruchomienia procedury makra na określony czas po tym, jak możemy wznowić program.

Są sytuacje, w których musimy wstrzymać proces wykonywania makr, aby ukończyć inne zestawy zadań. Inne zestawy zadań mogą być częścią naszego kodowania lub częścią innej procedury makra lub mogą być danymi wejściowymi dla bieżącego makra programu Excel. Jak można wstrzymać program, gdy jest uruchomiony? Możemy zatrzymać kod procedury na określony przez użytkownika czas, a po pewnym czasie możemy wznowić program. Możemy to zrobić w VBA za pomocą funkcji SLEEP.

Co robi funkcja uśpienia VBA?

SLEEP, jak sama nazwa mówi, „prześpij się na jakiś czas”, „odpocznij na jakiś czas”, „przerwa na jakiś czas”, czas wolny na jakiś czas, itd… Funkcja uśpienia umożliwia użytkownikom wstrzymanie kodu makra na milisekundy . Dzięki temu możemy opóźnić proces tworzenia makr.

Jeśli myślisz, że mamy wbudowaną funkcję o nazwie SLEEP, to się mylisz, ponieważ w języku VBA nie ma takiej funkcji. Mamy raczej funkcję o nazwie Sleep jako funkcja systemu Windows. Wprowadzając specjalny zestaw kodów, możemy faktycznie wywołać tę funkcję w VBA. W rzeczywistości jest to funkcja obecna w plikach DLL systemu Windows, więc musimy zadeklarować nomenklaturę API przed rozpoczęciem procedury w VBA.

Poniżej znajduje się kod VBA.

Kod:

#If VBA7 Następnie zadeklaruj publicznie PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) 'Dla 64-bitowych wersji programu Excel #Else Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)' Dla 32-bitowych wersji programu Excel #End If

Skopiuj powyższe i wklej w swoim module, zanim zaczniesz pisać kody makr. Powinien być wklejony w ten sposób w twoim module.

Przykład

Zanim pokażę ci sposób pisania kodu, powiem ci trochę więcej o funkcji snu. Opóźnia proces w milisekundach. Tak więc 1 sekunda to 1000 milisekund, jeśli chcesz wstrzymać na 10 sekund, powinna to być 10000 milisekund.

Przykład 1

Po wklejeniu kodu API przed rozpoczęciem procedury Sub utwórz nazwę makra.

Kod:

#Sub Sleep_Example1 () End Sub

Zadeklaruj dwie zmienne jako ciąg.

Kod:

Dim StartTime As String Dim EndTime As String

Do zmiennej StartTime przypisz wartość funkcji TIME. Uwaga: funkcja TIME w programie excel zwraca aktualny czas.

Kod:

StartTime = czas

Teraz wyświetlimy ten komunikat w oknie komunikatu VBA.

Kod:

StartTime = Time MsgBox StartTime

Teraz wstrzymamy kod na 10 sekund za pomocą funkcji uśpienia. Jak powiedziałem, wstrzymuje kod w milisekundach, aby wstrzymać na 10 sekund. Musimy użyć 10000 milisekund.

Kod:

Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) End Sub

Teraz użyj drugiej zmiennej EndTime i przypisz bieżący czas.

Kod:

Sub Sleep_Example1 () Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox StartTime Sleep (10000) EndTime = Time MsgBox EndTime End Sub

Teraz dwie zmienne StartTime i EndTime będą przechowywać czas rozpoczęcia i zakończenia makra. Uruchom to makro; na początku zobaczymy czas uruchomienia makra, czyli aktualny czas w Twoim systemie.

Kliknij OK. Będzie spać przez 10 sekund. Możesz zobaczyć symbol bufora.

Po 10 sekundach rozpocznie się wznawianie kodu, więc pokaże czas zakończenia, czyli po odczekaniu 10 sekund, jaka jest teraz aktualna godzina.

Teraz możesz zobaczyć, że makro rozpoczęło się o 10:54:14 i zakończyło o 10:54:24, tj. Dokładnie 10-sekundowa różnica istnieje. W ciągu tych 10 sekund VBA wstrzymuje działanie kodu.

Przykład # 2 - Funkcja uśpienia w pętlach

Uśpienia najlepiej jest używać z pętlami w języku VBA. Na przykład chcę wstawić numery seryjne od 1 do 10 za pomocą pętli Do while w VBA.

Po wstawieniu jednej liczby mój kod powinien odczekać 3 sekundy, więc gdy pętla zostanie uruchomiona 10 razy, powinien to być łącznie 30 sekund.

Kod:

Sub Sleep_Example2 () Dim k As Integer k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milisekund to 1 sekunda, więc 3000 jest równe 3 sekundom Loop End Pod

Uruchom ten kod i zaczekaj co najmniej 30 sekund na zakończenie procesu.

Aby śledzić dokładny czas, użyj poniższego kodu.

Kod:

Sub Sleep_Example2 () Dim k As Integer Dim StartTime As String Dim EndTime As String StartTime = Time MsgBox "Twój kod rozpoczął się o" & StartTime k = 1 Do While k <= 10 Cells (k, 1) .Value = kk = k + 1 Sleep (3000) '1000 milisonds to 1 sekunda, więc 3000 to 3 sekundy Loop EndTime = czas MsgBox "Twój kod zakończył się o" & EndTime End Sub

Ten kod wyświetli 2 okna komunikatów, pierwsza pokaże czas rozpoczęcia, a druga pokaże czas zakończenia.

Uwaga: podczas uruchamiania tego kodu nie można używać programu Excel. Nawet klawisz Escape nie zadziała.

Interesujące artykuły...