VBA podržava još jednu vrstu petlje u programu Excel 2016: petlju kroz svaki objekt u kolekciji objekata. Kolekcija se, kao što možda znate, sastoji od više objekata istog tipa. Na primjer, Excel ima zbirku svih otvorenih radnih knjiga (zbirka Radne knjige), a svaka radna knjiga ima zbirku radnih listova (zbirka Radni listovi).
Kada trebate proći kroz svaki objekt u kolekciji, koristite strukturu Za svaki sljedeći. Sljedeći primjer prolazi kroz svaki radni list u aktivnoj radnoj knjizi i briše radni list ako je prazan:
Pod DeleteEmptySheets()
Dim WkSht kao radni list
Application.DisplayAlerts = False
Za svaki WkSht u ActiveWorkbook.Worksheets
Ako je WorksheetFunction.CountA(WkSht.Cells) = 0 Tada
WkSht.Izbriši
Završi ako
Sljedeći WkSht
Application.DisplayAlerts = Točno
Kraj Sub
U ovom primjeru, varijabla WkSht je varijabla objekta koja predstavlja svaki radni list u radnoj knjizi. Ništa nije posebno u vezi s imenom varijable WkSht; možete koristiti bilo koje ime varijable koje želite.
Kôd prolazi kroz svaki radni list i određuje prazan list prebrojavanjem ćelija koje nisu prazne. Ako je taj broj nula, list je prazan i briše se. Primijetite da je postavka DisplayAlerts isključena dok petlja radi svoje. Bez te izjave, Excel iskače upozorenje svaki put kada se list sprema izbrisati.
Ako su svi radni listovi u radnoj knjizi prazni, dobit ćete pogrešku kada Excel pokuša izbrisati jedini list. Obično biste napisali kod za rješavanje te situacije.
Evo još jednog primjera za svaki sljedeći. Ovaj postupak koristi petlju za skrivanje svih radnih listova u aktivnoj radnoj knjizi osim aktivnog lista.
Sub HideSheets()
Dim Sht kao radni list
Za svaki Sht u ActiveWorkbook.Worksheets
Ako Sht.Name <> ActiveSheet.Name Onda
Sht.Visible = xlSheetHidden
Završi ako
Sljedeći Sht
Kraj Sub
Postupak HideSheets provjerava naziv lista. Ako nije isto kao naziv aktivnog lista, list je skriven. Primijetite da svojstvo Visible nije Boolean. Ovo svojstvo zapravo može poprimiti bilo koju od tri vrijednosti, a Excel nudi tri ugrađene konstante. Ako vas zanima treća mogućnost (xlVeryHidden), provjerite sustav pomoći.
Ono što se sakrije mora na kraju postati neskriveno, pa evo makronaredbe koja otkriva sve radne listove u aktivnoj radnoj knjizi:
Sub UnhideSheets()
Dim Sht kao radni list
Za svaki Sht u ActiveWorkbook.Worksheets
Sht.Visible = xlSheetVisible
Sljedeći Sht
Kraj Sub
Nije iznenađujuće da možete kreirati ugniježđene petlje For Each-Next. Procedura CountBold petlja kroz svaku ćeliju u korištenom rasponu na svakom radnom listu u svakoj otvorenoj radnoj knjizi i prikazuje broj ćelija koje su oblikovane podebljano:
Pod Count Bold()
Dim WBook As Workbook
Zatamnite WSheet kao radni list
Zatamnjena ćelija kao raspon
Dim Cnt As Long
Za svaku radnu knjigu u radnim bilježnicama
Za svaki WSheet u WBook.Worksheets
Za svaku ćeliju u WSheet.UsedRange
Ako je Cell.Font.Bold = True, onda je Cnt = Cnt + 1
Sljedeća ćelija
Sljedeći WSheet
Sljedeća knjiga
MsgBox Cnt & "pronađene podebljane ćelije"
Kraj Sub