Excel VBA Loops-for Each, for Next, Do While, Nested & More
aby działać skutecznie w VBA, musisz zrozumieć pętle.pętle
umożliwiają powtórzenie bloku kodu określoną liczbę razy lub powtórzenie bloku kodu na każdym obiekcie w zestawie obiektów.
najpierw pokażemy Ci kilka przykładów, aby pokazać, do czego są zdolne pętle. Wtedy nauczymy Cię wszystkiego o pętlach.
pętla VBA szybkie przykłady
dla każdej pętli
dla każdej pętli pętla przez każdy obiekt w kolekcji, taki jak każdy arkusz roboczy w skoroszycie lub każda komórka w zakresie.
zapętl wszystkie arkusze robocze w skoroszycie
ten kod będzie zapętlać wszystkie arkusze robocze w skoroszycie, odkrywając każdy arkusz:
1
2
3
4
5
6
7
8
|
sub loopthroughsheets()
Dim ws jako arkusz roboczy
dla każdego ws w arkuszach roboczych
ws.Visible = True
Next
End Sub
|
Pętla przez wszystkie komórki w zakresie
ten kod zostanie zapętlony przez zakres komórek, testując, czy wartość komórki jest ujemna, dodatnia lub zerowa: ętla for next jest pętlą for next, która może być używana do tworzenia kolejnych pętli. Pętla for Next umożliwia zapętlanie przez liczby całkowite.
Ten kod będzie zapętlał się przez liczby całkowite od 1 do 10, wyświetlając każdą z nich pole z Komunikatem:
1
2
3
4
5
6
|
Sub forloop()
Dim i Jak liczba całkowita
Dla i = Od 1 Do 10
Pole wprowadzania i
Dalej
Kończę podtytuł
|
Wykonuję cykle
Wykonuję cykle, dopóki jest spełniony warunek. Kod ten będzie również przechodził przez liczby całkowite od 1 do 10, wyświetlając każdą z nich wraz z Komunikatem.
1
2
3
4
5
6
7
8
|
Sub dowhileloop()
n Jak Zmniejszyć liczbę całkowitą
n = 1
Zrobić, gdy n < 11
Pole do wiadomości n
n = n + 1
Cykl
Koniec nagłówka
|
Rób Cykle, aż
Odwrotnie, Do Until pętle będą zapętlać się, dopóki warunek nie zostanie spełniony. Ten kod robi to samo, co dwa poprzednie przykłady.
1
2
3
4
5
6
7
8
|
Sub dountilloop()
n Jak Zmniejszyć liczbę całkowitą
n = 1
Wróć do n >= 10
Pole do wiadomości n
n = n + 1
Cykl
Koniec nagłówka
|
– o tym poniżej, ale należy zachować szczególną ostrożność podczas tworzenia pętli do While lub Do Until, aby nie tworzyć nigdy kończącej się pętli.
VBA Loop Builder
To jest zrzut ekranu „Loop Builder” z naszego dodatku Premium VBA: AutoMacro. Konstruktor pętli pozwala szybko i łatwo tworzyć pętle do pętli między różnymi obiektami lub liczbami. Można wykonywać operacje na każdym obiekcie i / lub zaznaczać tylko obiekty spełniające określone kryteria.
dodatek zawiera również wiele innych kreatorów kodu, obszerną bibliotekę kodu VBA i zestaw narzędzi do kodowania. To must have dla każdego programisty VBA.
teraz omówimy różne rodzaje pętli w głębi.
VBA dla następnej pętli
dla składni pętli
pętla for Next pozwala na powtórzenie bloku kodu określoną liczbę razy. Składnia jest:
1
2
3
4
5
|
For Counter = Start to End
Next
|
Where the items in brackets are optional.
- – Declares the counter variable. Required if Option Explicit is declared at the top of your module.
- Counter – zmienna całkowita służąca do zliczania
- Start – wartość początkowa (np. 1)
- End-wartość końcowa (np. 10)
- – pozwala policzyć każde n liczb całkowitych zamiast każdej 1 liczby całkowitej. Można również przejść w odwrotnej kolejności z ujemną wartością (np. Krok -1)
- – kod, który powtórzy
- Next-polecenie zamykające pętlę For Next. Możesz dołączyć licznik lub nie. Jednak zdecydowanie polecam włączenie licznika, ponieważ ułatwia to czytanie kodu.
Jeśli to jest mylące, nie martw się. Omówimy kilka przykładów:
policz do 10
Ten kod będzie liczył do 10 przy użyciu pętli For-Next:
1
2
3
4
5
6
7
8
|
Sub ForEach_CountTo10()
n Jak Zmniejszyć liczbę całkowitą
Dla n = Od 1 do 10
MsgBox n
Następny n
Koniec nagłówka
|
Dla etapu cyklu
Liczyć do 10 – Tylko liczby parzyste
To kod będzie liczył do 10 licząc tylko liczby parzyste:
1
2
3
4
5
6
7
8
|
Sub ForEach_CountTo10_Even()
n Jak Zmniejszyć liczbę całkowitą
Dla n = 2-10 Krok 2
Pole do wiadomości n
Następny n
Koniec nagłówka
|
Należy pamiętać, że dodaliśmy „Krok 2”. To mówi pętli For, aby „krok” przez licznik o 2. Możemy również użyć ujemnej wartości kroku do kroku odwrotnego:
dla kroku pętli – odwrócenie
odliczanie od 10
ten kod będzie odliczał od 10:
1
2
3
4
5
6
7
8
9
|
Подзаголовок_countdown_inverse()
Zmniejsz n Jako liczba całkowita
Dla n = Od 10 Do Kroku 1 -1
Pole wprowadzania n
Następujący n
Pole wprowadzania „Zdjąć”
Koniec nagłówka
|
1
2
3
4
5
6
7
8
9
10
11
|
Sub Nested_ForEach_MultiplicationTable()
Przyciemnić linię Jako Liczba Całkowita, kolumny Jako Liczba Całkowita
Do wierszy = 1-9
Do kolumn = 1-9
Komórki (wiersz + 1, kolumna + 1).Value = row * col
Next col
Next row
End Sub
|
exit for
Instrukcja exit for umożliwia natychmiastowe wyjście z pętli for next.
zwykle używasz Exit For wraz z instrukcją If, wychodząc z pętli For Next, jeśli spełniony jest określony warunek.
na przykład, możesz użyć pętli For, aby znaleźć komórkę. Po znalezieniu tej komórki możesz wyjść z pętli, aby przyspieszyć kod.
ten kod będzie przechodził przez wiersze od 1 do 1000, szukając „error” w kolumnie A. Jeśli zostanie znaleziony, kod wybierze komórkę, powiadomi Cię o znalezionym błędzie i zakończy pętlę:
ważne: w przypadku zagnieżdżonych pętli For, Exit For kończy tylko bieżącą pętlę For, a nie wszystkie aktywne pętle.
Kontynuuj dla
VBA nie ma polecenia „Kontynuuj”, które znajduje się w Visual Basic. Zamiast tego musisz użyć „Exit”.
VBA dla każdej pętli
VBA dla każdej pętli zapętli się przez wszystkie obiekty w kolekcji:
- wszystkie komórki w zakresie
- wszystkie arkusze w skoroszycie
- wszystkie kształty w arkuszu
- wszystkie otwarte skoroszyty
Możesz również użyć zagnieżdżonych dla każdej pętli do:
- wszystkie komórki w zakresie we wszystkich arkuszach
- wszystkie kształty we wszystkich arkuszach
- wszystkie arkusze we wszystkich otwartych skoroszytach
- i tak dalej…
składnia jest:
1
2
3
|
For Each Object in Collection
Next
|
Where:
For Each Cell in Range
This code will loop through each cell in a range:
For Each Worksheet in Workbook
This code will loop through all worksheets in a workbook, unprotecting each sheet:
1
2
3
4
5
6
7
8
9
|
Sub ForEachSheet_inWorkbook()
Dim ws As Worksheet
For Each ws In Worksheets
ws.Usuń „hasło”
następny ws
End Sub
|
dla każdego otwartego skoroszytu
ten kod zapisze i zamknie wszystkie otwarte skoroszyty:
1
2
3
4
5
6
7
8
9
|
подзаголовокwb_inworkbooks()
Przyciemnić wb Jak Skoroszyt
Dla Każdego wb W Pracy Książkach
wb.Zamknij zmiany zapisu:=True
następny WB
End Sub
|
dla każdego kształtu w arkuszu roboczym
ten kod usunie wszystkie kształty w aktywnym arkuszu.
1
2
3
4
5
6
7
8
9
|
Podtytuł()
Dim shp Jako Forma
Dla Każdego shp W Tabeli Aktywności.Figury
shp.100000000000000000000000000000000000000000 kształt w każdym arkuszu w skoroszycie
Możesz również zagnieżdżać dla każdej pętli. Tutaj będziemy przeglądać wszystkie kształty we wszystkich arkuszach w aktywnym skoroszycie:
dla każdej pętli IFjak już wspomnieliśmy, można użyć instrukcji If wewnątrz pętla, wykonująca akcje tylko wtedy, gdy spełnione są określone kryteria. ten kod ukryje wszystkie puste wiersze w zakresie: VBA do While LoopVBA do While I do Until (patrz następna sekcja) są bardzo podobne. Będą powtarzać pętlę, gdy (lub dopóki) warunek zostanie spełniony. pętla do While powtarza pętlę, gdy spełniony jest warunek. Oto składnia Do While:
gdzie:
można również ustawić pętlę do while z warunkiem na końcu pętli:
We will demo each one and show how they differ: Do WhileHere is the Do While loop example we demonstrated previously:
pętla podczas gdyteraz wykonajmy tę samą procedurę, z tym że przeniesiemy warunek na koniec pętli:
VBA Wykonuje cykl, dopókiNie wróci do Pętle będą powtarzać pętlę aż do spełnienia określonego warunku. Składnia jest zasadniczo taka sama jak pętle do While:
i podobnie warunek może przejść na początku lub na końcu pętli:
Do UntilThis do Until loop will count to 10, like our previous examples
Cykl DoTen cykl, dopóki cykl nie będzie się liczyć do 10:
oto przykład wyjścia do: koniec lub przerwa pętlijak wspomnieliśmy powyżej, możesz użyć wyjścia dla lub wyjścia do, aby zakończyć pętle:
However, these commands must be added to your code before you run twoja pętla. Jeśli próbujesz „złamać” aktualnie uruchomioną pętlę, możesz spróbować nacisnąć ESC lub CTRL + Pause Break na klawiaturze. Może to jednak nie zadziałać. Jeśli to nie zadziała, musisz poczekać na zakończenie pętli lub, w przypadku pętli bez końca, użyj CTRL + ALT + Delete, aby wymusić zamknięcie programu Excel. dlatego staram się unikać pętli Do, łatwiej jest przypadkowo utworzyć nieskończoną pętlę zmuszającą do ponownego uruchomienia Excela, potencjalnie tracąc pracę. więcej przykładów pętliPętla przez wierszeTo będzie pętla przez wszystkie wiersze w kolumnie: Pętla przez kolumnyTo będzie pętla przez wszystkie kolumny z rzędu: Pętla przez pliki w folderzeten kod będzie pętla przez wszystkie pliki w folderze, tworząc listę: Pętla przez tablicęten kod będzie pętla przez tablica 'arrlist’:
funkcja lbound otrzymuje”dolną granicę”tablicy, a ubound otrzymuje”górną granicę”. pętle w Access VBAwiększość powyższych przykładów będzie również działać w Access VBA. Jednak w programie Access przepuszczamy obiekt Recordset, a nie Obiekt Range.
|