Ten samouczek pokaże Ci przykłady użycia For Each Loop w VBA. Kliknij tutaj, aby dowiedzieć się więcej o pętlach.
Dla każdej pętli
Pętla For Each pozwala na przechodzenie przez pętlę każdy obiekt w kolekcji:
- Wszystkie komórki w zakresie
- Wszystkie arkusze w skoroszycie
- Wszystkie otwarte skoroszyty
- Wszystkie kształty w arkuszu
- Wszystkie elementy w tablicy
- i więcej!
Dla każdego: podstawowe przykłady
Te przykłady pokażą, jak skonfigurować pętle For Each, aby przechodziły przez różne typy obiektów.
Zapętlaj komórki
Ta procedura przejdzie przez każdą komórkę w zakresie A1:A10, ustawiając komórkę na prawo równe jej samej.
12345678 | Sub dla każdej komórki()Przyciemnij komórkę jako zakresDla każdej komórki w arkuszach("Arkusz1").Range("A1:A10")Cell.Offset(0, 1)).value = Cell.valueNastępna komórkaNapis końcowy |
Zapętlanie arkuszy
Ta procedura będzie przechodzić przez każdy arkusz w skoroszycie, odkrywając każdy arkusz.
12345678 | Sub dla każdego arkusza()Dim ws As WorksheetDla każdego ws w arkuszachws.Widoczny = PrawdaNastępny arkuszNapis końcowy |
Zapętlaj skoroszyty
Ta procedura przejdzie przez każdy skoroszyt, zamykając każdy z nich.
12345678 | Sub dla każdego skoroszytu()Dim wb jako skoroszytDla każdego wb w skoroszytachwb.ZamknijNastępny wbNapis końcowy |
Zapętlanie kształtów
Ta procedura przejdzie przez każdy kształt w Arkuszu1, usuwając każdy z nich.
12345678 | Sub dla każdego kształtu()Dim Shp jako kształtDla każdego Shp w arkuszach ("Arkusz1"). KształtyShp.UsuńNastępnyNapis końcowy |
Zapętlone wykresy
Ta procedura będzie przechodzić przez każdy wykres w arkuszu 1, usuwając każdy z nich.
12345678 | Sub dla każdego wykresu()Dim cht As ChartObjectDla każdego cht In Sheets("Arkusz1").ChartObjectscht.UsuńNastępny czatNapis końcowy |
Zapętlaj tabele przestawne
Ta procedura będzie przechodzić przez każdą tabelę przestawną w arkuszu 1, usuwając każdą z nich
12345678 | Sub dla każdej tabeli przestawnej()Dim pvt jako tabela przestawnaDla każdego pvt w arkuszach ("Arkusz1"). Tabele przestawnepvt.Wyczyść tabelęNastępny pvtNapis końcowy |
Zapętlaj tabele
Ta procedura będzie przechodzić przez każdą tabelę w arkuszu Sheet1, usuwając każdą z nich.
12345678 | Sub dla każdej tabeli()Dim tbl As ListObjectDla każdej tabeli w arkuszach("Arkusz1").ListObjectstab.UsuńNastępna tblNapis końcowy |
Zapętlaj elementy w tablicy
Ta procedura przejdzie przez każdy element tablicy, wyświetli każdą wartość w polu msgbox,
12345678910 | Sub ForEachItemInArray()Dim arrValue As VariantPrzyciemnij element jako wariantarrValue = Array("Pozycja 1", "Pozycja 2", "Pozycja 3")Dla każdego elementu w arrValueElement MsgBoxNastępny przedmiotNapis końcowy |
Zapętlaj liczby
Ta procedura przejdzie przez każdą liczbę w tablicy, wyświetli każdą wartość w polu msgbox,
12345678910111213 | Sub ForEachNumberInNumbers()Dim arrNumber(1 do 3) jako liczba całkowitaDim num jako wariantliczba_przykladu(1) = 10liczba_arr(2) = 20liczba_arr(3) = 30For Each num In arrNumberMsgbox NumerNastępna liczbaNapis końcowy |
Dla każdego konstruktora pętli
Przykłady w tym artykule zostały zbudowane z Konstruktor pętli w naszym Dodatek VBA: Automakro.
ten Konstruktor pętli bardzo ułatwia generowanie kodu do pętli obiektów. Automakro zawiera również wiele innych Generatory kodu, obszerny Biblioteka kodówi potężny Narzędzia do kodowania.
Dla każdego - Jeśli
Możesz również użyć instrukcji If w pętlach, aby sprawdzić, czy obiekty spełniają określone kryteria, wykonując tylko działania na tych obiektach, które spełniają te kryteria. Oto przykład przechodzenia przez każdą komórkę w zakresie:
Dla każdej komórki w zakresie - Jeśli
1234567891011121314 | Sub If_Loop()Dim Cell jako zakresDla każdej komórki w zakresie ("A2:A6")Jeśli Komórka.Wartość > 0 WtedyCell.Offset(0, 1).Value = "Dodatni"ElseIf Cell.Value < 0 WtedyCell.Offset(0, 1).Value = "Ujemna"W przeciwnym razieCell.Offset(0, 1).Value = "Zero"Zakończ, jeśliNastępna komórkaNapis końcowy |
Dla każdego typowego przykładu
Zamknij wszystkie skoroszyty
Ta procedura zamknie wszystkie otwarte skoroszyty, zapisując zmiany.
123456789 | Sub Zamknij Wszystkie Skoroszyty()Dim wb jako skoroszytDla każdego wb w skoroszytachwb.Close SaveChanges:=TrueNastępny wbNapis końcowy |
Ukryj wszystkie arkusze
Ta procedura ukryje wszystkie arkusze.
12345678 | Sub Ukryj wszystkie arkusze()Dim ws As WorksheetDla każdego ws w arkuszachws.Visible = xlSheetHiddenNastępnyNapis końcowy |
Odkryj wszystkie arkusze
Ta procedura odkryje wszystkie arkusze.
12345678 | Sub Odkryj wszystkie arkusze()Dim ws As WorksheetDla każdego ws w arkuszachws.Visible = xlSheetVisibleNastępnyNapis końcowy |
Chroń wszystkie arkusze
Ta procedura ochroni wszystkie arkusze.
12345678 | Sub chroń wszystkie arkusze()Dim ws As WorksheetDla każdego ws w arkuszachws.Chroń hasło:="…"NastępnyNapis końcowy |
Odblokuj wszystkie arkusze
Ta procedura usunie ochronę wszystkich arkuszy.
12345678 | Sub UnprotectAllArkusze()Dim ws As WorksheetDla każdego ws w arkuszachws.Unprotect Password:="… "NastępnyNapis końcowy |
Usuń wszystkie kształty ze wszystkich arkuszy Work
Ta procedura spowoduje usunięcie wszystkich kształtów ze skoroszytu.
123456789101112 | Sub Usuń wszystkie kształty na wszystkich arkuszach roboczych()Przyciemnij arkusz jako arkusz roboczyDim Shp jako kształtDla każdego ws w arkuszachDla każdego Shp w ws.KształtyShp.UsuńNastępny ShpNastępnyNapis końcowy |
Odśwież wszystkie tabele przestawne
Ta procedura odświeży wszystkie tabele przestawne w arkuszu.
12345678 | Sub Odśwież wszystkie tabele przestawne()Dim pvt jako tabela przestawnaDla każdego pvt w arkuszach ("Arkusz1"). Tabele przestawnepvt.RefreshTableNastępny pvtNapis końcowy |
Używanie For Each w Access VBA
Pętla For Each działa w taki sam sposób w programie Access VBA, jak w programie Excel VBA. Poniższy przykład usunie wszystkie tabele z bieżącej bazy danych.
123456789 | Sub Usuń wszystkie tabele()Dim tdf As TableDefDim dbs jako baza danychUstaw dbs = Bieżąca baza danychDla każdego tdf w dbs.TableDefsDoCmd.DeleteObject tdf.NamePętlaUstaw dbs = NicNapis końcowy |