Pętle powtarzają instrukcje kilka razy i mogą zaoszczędzić dużo czasu.
W Excel VBA istnieją następujące typy pętli:
Poniższy kod wstawia sekwencję liczb do każdej komórki kolumny A (od 1 do 12):
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
Ten kod jest bardzo powtarzalny...
Wyobraź sobie, że musielibyśmy wstawiać kolejne liczby do setek komórek zamiast tylko 12... Teraz rozumiesz, dlaczego pętle są bardzo przydatne.
Podajmy przykład pustego cyklu While:
Sub while_loop() While [stan : schorzenie] 'Instrukcje Wend End Sub
Dopóki warunek jest spełniony, instrukcje w pętli będą nadal wykonywane (należy jednak uważać, aby nie utworzyć nieskończonej pętli).
Poniżej znajduje się omówione wcześniej makro zapętlające, zamienione w pętlę While:
Sub while_loop() Dim num As Integer num = 1 'Numer początkowy (w tym przypadku jest to numer linii i ustawiana wartość) While num <= 12 'Dopóki zmienna num jest mniejsza lub równa 12, instrukcje zostaną wykonane Cells(num, 1) = num 'Numeracja num = num + 1 'Po każdym przejściu pętli liczba jest zwiększana o 1 Wend End Sub
Używając tej pętli w makrze, gdybyśmy potrzebowali 400 taśm zamiast 12, jedyne co musielibyśmy zrobić, to zastąpić 12 400.
Istnieje inny sposób napisania pętli, która działa tak samo jak While Wend (działa tak długo, jak spełniony jest określony warunek zawarty w poleceniu While):
Sub do_while_loop() Do While [stan : schorzenie] 'Instrukcje Loop End Sub
W poniższej wersji widać, że warunek można zapisać na końcu pętli Do Loop, co oznacza, że instrukcje zostaną wykonane dokładnie co najmniej raz:
Sub do_while_loop() Do 'Instrukcje Loop While [stan : schorzenie] End Sub
Zamiast wykonywać pętlę, gdy warunek jest spełniony, możemy również wyjść z pętli na podstawie warunku, jeśli zastąpimy While przez Until:
Sub do_while_loop() Do Until [stan : schorzenie] 'Instrukcje Loop End Sub
Sub for_loop() For i = 1 To 5 'Instrukcje Next End Sub
Pętla For powtórzy się tutaj 5 razy.
Za każdym razem, gdy ten cykl się powtarza, zmienna i jest automatycznie zwiększana o 1:
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
Możliwe jest wcześniejsze wyjście z pętli For, korzystając z poniższej instrukcji:
Exit For 'Wyjdź z pętli For
Rozważmy przykład, który wyraźnie to pokaże:
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'W komórce A1 określiliśmy limit liczby powtórzeń For i = 1 To 7 'Oczekiwana liczba cykli: 7 If i > max_loops Then 'Jeśli komórka A1 jest pusta lub zawiera liczbę mniejszą niż 7, to zmniejsz liczbę powtórzeń Exit For 'Jeżeli poprzedni warunek to TRUE to wyjście z pętli For...loop End If MsgBox i Next End Sub
Inni operatorzy Exit:
Exit Do 'Wyjście z pętli Do Loop
Exit Sub 'Wyjdź z procedury
Exit Function 'Funkcja wyjścia