Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

While...Wend

Termin Definicja
While...Wend

While...Wend to starsza konstrukcja pętli VBA, w praktyce zastępowana bardziej elastyczną pętlą Do...Loop.

Składnia i działanie pętli While...Wend w VBA

While...Wend jest konstrukcją sterującą języka Visual Basic for Applications, używaną do wielokrotnego wykonywania instrukcji tak długo, jak długo określony warunek ma wartość logiczną True. Podstawowa postać tej pętli wygląda następująco: While warunek, następnie znajduje się blok instrukcji, a całość kończy słowo kluczowe Wend. Warunek jest sprawdzany przed każdym wykonaniem bloku. Jeżeli już przy pierwszym sprawdzeniu ma wartość False, instrukcje pomiędzy While i Wend nie zostaną wykonane ani razu.

W warunku można używać zmiennych, operatorów porównania oraz operatorów logicznych dostępnych w VBA. Przykładowo, pętla While licznik <= 10 będzie wykonywana, dopóki wartość zmiennej licznik nie przekroczy 10. Aby pętla mogła się zakończyć, jej ciało powinno zwykle zmieniać dane wpływające na wynik warunku. W przeciwnym razie program będzie wykonywał ten sam blok bez końca, co może doprowadzić do zawieszenia makra albo długotrwałego zajęcia procesora.

Przepływ sterowania i aktualizacja warunku

Po wejściu do pętli VBA wykonuje instrukcje zapisane pomiędzy While a Wend od góry do dołu. Po napotkaniu Wend sterowanie wraca do instrukcji While, a warunek jest obliczany ponownie. Taki cykl powtarza się do chwili, gdy wyrażenie logiczne zwróci False. W praktyce często stosuje się zmienną licznikową albo odczyt kolejnych elementów danych. Przykład z licznikiem może wyglądać następująco: While i <= 5, wykonanie operacji, a następnie i = i + 1. Bez ostatniej instrukcji wartość i nie zmieniłaby się i pętla nie osiągnęłaby warunku końcowego.

Warto odróżnić zakończenie pętli od pominięcia części jej ciała. While...Wend nie udostępnia instrukcji Exit While. Jeżeli kod musi przerwać wykonywanie pętli w reakcji na dodatkowe zdarzenie, typowym rozwiązaniem w VBA jest zastąpienie tej konstrukcji pętlą Do While...Loop lub Do...Loop While. Te warianty pozwalają użyć Exit Do, a także dają możliwość umieszczenia warunku na początku albo na końcu cyklu. Ma to znaczenie wtedy, gdy program powinien wykonać blok przynajmniej raz lub zakończyć pracę przed dojściem do naturalnego warunku końcowego.

Różnice między While...Wend a Do...Loop

While...Wend pozostaje obsługiwaną konstrukcją VBA, lecz jest rozwiązaniem o ograniczonych możliwościach sterowania. W pętli Do While...Loop można zakończyć działanie za pomocą Exit Do, a także stosować alternatywne warianty składni, takie jak Do Until...Loop oraz Do...Loop Until. W przypadku Until blok jest wykonywany do momentu spełnienia warunku końcowego. Konstrukcje Do...Loop pozwalają również umieścić sprawdzenie po instrukcjach, dzięki czemu ciało pętli może wykonać się raz przed pierwszą kontrolą warunku.

Przy przepisywaniu starszego makra z While...Wend na Do While...Loop trzeba zachować kolejność sprawdzania warunku. Oryginalna pętla While warunek odpowiada zasadniczo konstrukcji Do While warunek, po której następuje blok instrukcji i słowo Loop. Nie jest natomiast równoważna zapisowi Do, blok instrukcji, Loop While warunek, ponieważ w tym drugim wariancie blok zostanie wykonany co najmniej jeden raz. Różnica może zmienić działanie makra, zwłaszcza gdy zmienna wejściowa jest już pusta, niepoprawna albo ma wartość spełniającą warunek zakończenia.

Podczas analizy kodu należy też sprawdzić typy danych użytych w wyrażeniu. W VBA wartość logiczna może wynikać bezpośrednio z porównania, na przykład plikIstnieje = True, ale może również zależeć od wartości liczbowej lub wyniku funkcji. Jawne deklarowanie zmiennych, na przykład przez Dim i As Long i używanie dyrektywy Option Explicit, ułatwia wykrycie literówek w nazwach. Błędnie zadeklarowana albo niezmieniana zmienna może prowadzić do nieoczekiwanego pominięcia pętli lub do nieskończonego wykonywania makra.

Znaczenie konstrukcji While...Wend podczas serwisowania makr

W arkuszach Excel i innych dokumentach zawierających makra VBA pętla While...Wend może obsługiwać powtarzalne operacje na wierszach, komórkach, plikach lub wynikach obliczeń. Przy diagnozowaniu problemu trzeba ustalić wartość warunku przed pierwszym wejściem do pętli, sprawdzić wszystkie instrukcje modyfikujące zmienne oraz prześledzić moment dojścia do Wend. Pomocne jest uruchomienie procedury krokowo w edytorze VBA i obserwowanie wartości zmiennych w oknie Locals, oknie Immediate albo podczas zatrzymania wykonywania na punkcie przerwania.

Jeżeli makro przestaje odpowiadać, jednym z możliwych powodów jest brak postępu w danych sterujących pętlą. Przykładem może być odczyt komórki, po którym kod nie przechodzi do następnego wiersza, albo warunek oparty na wartości, która nigdy nie zmienia się na False. Należy wtedy sprawdzić, czy instrukcja aktualizująca licznik lub indeks wykonuje się przy każdej ścieżce przejścia przez pętlę. Jeżeli w środku znajdują się instrukcje warunkowe, aktualizacja może być przypadkowo pomijana dla określonych danych. W takich sytuacjach przejście na Do...Loop z kontrolowanym Exit Do często upraszcza obsługę warunków wyjątkowych, ale sama zamiana składni nie zastępuje sprawdzenia logiki algorytmu.

Warszawskie Pogotowie Komputerowe zajmuje się profesjonalną naprawą laptopów i komputerów PC, w tym diagnozowaniem problemów z makrami, dodatkami oraz oprogramowaniem uruchamianym na tych urządzeniach. Przy zgłoszeniu dotyczącym zawieszającego się makra istotne są informacje o wersji pakietu Office, sposobie uruchamiania procedury, komunikacie błędu oraz pliku, w którym występuje problem. Takie dane pozwalają odtworzyć działanie pętli, ustalić, czy przyczyną jest niepoprawny warunek, brak zmiany zmiennej, błąd danych wejściowych czy problem niezwiązany bezpośrednio z konstrukcją While...Wend.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę