VBA w Excelu - kurs dla początkujących |
|
|
|
|
Następnym bardzo wygodnym narzędziem są pętle, służą one do wielokrotnego wykonywania danego bloku kodu. Pętle możemy użyć do obliczeń matematycznych, wyodrębniania fragmentów danych lub do wykonywania tych samych operacji na wielu obiektach. VBA pozwala tworzyć kilka typów pętli, jedną z nich jest pętla Do...Loop. Instrukcji Do...Loop użyjemy jeżeli nie wiemy ile razy pętla ma być wykonana. Jest to pętla warunkowa, w której kluczową cechą jest warunek. Instrukcje umieszczone wewnątrz pętli są powtarzane tak długą jak długą pewien warunek jest spełniony (ma wartość True) lub do momentu gdy ten warunek zostanie spełniony (uzyska wartość True). Mamy do dyspozycji jakby pięć odmian pętli Do...Loop, wszystkie z nich działają w podobny sposób różnice przedstawiam w tabeli poniżej. Tabela. Odmiany pętli Do...Loop Typ pętli Opis
Do...Loop Wielokrotnie wykonuje blok kodu tak długą aż instrukcja warunkowa umieszczona wewnątrz tej pętli wykona instrukcje Exit Do. W tym przypadku użycie instrukcji Exit Do jest praktycznie obowiązkowe gdybyśmy jej nie zastosowali pętla byłaby wykonywana w nieskończoność.
Do While...Loop Rozpoczyna i powtarza blok kodu umieszczony wewnątrz pętli jeżeli jest spełniony warunek umieszczony na początku tej pętli. Jest to prawdopodobnie najczęściej stosowana odmiana pętli warunkowej, szczegółowo opisałem ją w dalszej części strony.
Do...Loop While Wykonuje blok kodu umieszczony wewnątrz pętli jeden raz i powtarza go tak długą jak długo jest spełniony warunek umieszczony na końcu pętli.
Do Until...Loop Rozpoczyna i powtarza blok kodu umieszczony wewnątrz pętli dopóki nie zostanie spełniony warunek umieszczony na początku tej pętli.
Do...Loop Until Wykonuje blok kodu umieszczony wewnątrz pętli jeden raz i powtarza go do czasu gdy zostanie spełniony warunek umieszczony na końcu pętli .
Instrukcja Exit Do Wewnątrz pętli warunkowej można posłużyć się instrukcją Exit Do. Instrukcja ta kończy działanie pętli i następuje wykonanie pierwszej instrukcji poza pętlą. Konstrukcje taką stosujemy w pierwszej odmianie pętli Do...Loop (patrz tabela powyżej) lub w pozostałych odmianach gdy wykonanie pętli chcemy uzależnić od dodatkowego warunku. Instrukcja Exit Do najczęściej występuje wewnątrz instrukcji If...Then lub Select Case. Wewnątrz pętli można umieścić dowolną liczbę instrukcji Exit Do. Instrukcje Exit Do może być stosowana tylko wewnątrz przedstawionych powyżej odmian pętli Do...Loop. Sposób użycia instrukcji Exit Do przedstawiłem w zaprezentowanym przykładzie na tej stronie.
Pętla Do While...Loop
Jak już wspomniałem wszystkie odmiany pętli Do...Loop działają w podobny sposób. Podstawową (prawdopodobnie najczęściej stosowano) odmianą pętli warunkowej Do..Loop jest postać Do While...Loop. W przypadku tej pętli wykonanie kodu VBA rozpoczyna od sprawdzenia warunku który jest umieszczony na początku pętli. Jeżeli warunek nie jest spełniony instrukcje umieszczone wewnątrz pętli są pomijane (pętla nie jest wykonywana) i wykonywany jest kod umieszczony poniżej instrukcji Loop. Jeżeli zaś warunek jest spełniony, VBA wykonuje blok kodu umieszczony w pętli (pętla jest wykonywana).
Składnia:
Do While warunek
Objaśnienie:
Przykład kod przykładu:
Private Sub CommandButton1_Click()
Przykład opis przykładu: W przykładzie po naciśnięciu (kliknięciu) przycisku polecenia (CommandButton1) zapisywane są dane z komórek A1, B1, i C1 Arkusza1 do odpowiednich komórek w Arkuszu2. Aby przetestować ten przykład wykonaj następujące czynności:
W kodzie przykładu zastosowaliśmy instrukcje Exit Do. Instrukcja ta w naszym przypadku spełnia dwa zadania. Pierwsze ogranicza ilość zapisanych wierszy aby nasza baza danych nie była zbyt rozbudowana. Drugie powoduje wyjście z pętli Do While...Loop gdyby z jakiegoś powodu nasza pętla miała być wykonywana w nieskończoność. Jeszcze uwaga do przykładu. Kod ten w Arkuszu2 przeszukuje po kolei wiersze w określonej przez nas jednej kolumnie. Po natrafieniu na pustą komórkę w tej kolumnie zapisywane są dane do wiersza w którym jest ta komórka. Aby kod działał poprawnie komórka umieszczona w kolumnie którą przeszukuje kod powinna być za każdym razem zapisywana. Możemy tam umieszczać na przykład numer porządkowy czy datę zapisania. |