VBA understøtter endnu en type looping i Excel 2016: looping gennem hvert objekt i en samling af objekter. En samling består, som du måske ved, af en række genstande af samme type. For eksempel har Excel en samling af alle åbne projektmapper (Arbejdsbogsamlingen), og hver projektmappe har en samling af regneark (Arbejdsarksamlingen).
Når du skal gennemgå hvert objekt i en samling, skal du bruge For Every-Next-strukturen. Følgende eksempel går gennem hvert regneark i den aktive projektmappe og sletter regnearket, hvis det er tomt:
Sub DeleteEmptySheets()
Dim WkSht som arbejdsark
Application.DisplayAlerts = Falsk
For hver WkSht i ActiveWorkbook.Worksheets
Hvis WorksheetFunction.CountA(WkSht.Cells) = 0 Så
WkSht.Slet
Afslut Hvis
Næste WkSht
Application.DisplayAlerts = Sand
Slut Sub
I dette eksempel er variablen WkSht en objektvariabel, der repræsenterer hvert regneark i projektmappen. Intet er specielt ved variabelnavnet WkSht; du kan bruge et hvilket som helst variabelnavn, du kan lide.
Koden går gennem hvert regneark og bestemmer et tomt ark ved at tælle de ikke-tomme celler. Hvis tallet er nul, er arket tomt, og det slettes. Bemærk, at DisplayAlerts-indstillingen er slået fra, mens løkken gør sit. Uden den erklæring dukker Excel en advarsel op, hver gang et ark er ved at blive slettet.
Hvis alle regnearkene i projektmappen er tomme, får du en fejl, når Excel forsøger at slette det eneste ark. Normalt ville du skrive kode for at håndtere den situation.
Her er et andet For Every-Next eksempel. Denne procedure bruger en løkke til at skjule alle regneark i den aktive projektmappe undtagen det aktive ark.
Sub HideSheets()
Dim Sht As Arbejdsark
For hver Sht i ActiveWorkbook.Worksheets
Hvis Sht.Name <> ActiveSheet.Name Så
Sht.Visible = xlSheetHidden
Afslut Hvis
Næste Sht
Slut Sub
HideSheets-proceduren kontrollerer arknavnet. Hvis det ikke er det samme som det aktive arks navn, er arket skjult. Bemærk, at egenskaben Visible ikke er boolesk. Denne egenskab kan faktisk antage en hvilken som helst af tre værdier, og Excel giver tre indbyggede konstanter. Hvis du er nysgerrig efter den tredje mulighed (xlVeryHidden), så tjek hjælpesystemet.
Det, der bliver skjult, skal til sidst vises, så her er en makro, der viser alle regneark i den aktive projektmappe:
Sub UnhideSheets()
Dim Sht As Arbejdsark
For hver Sht i ActiveWorkbook.Worksheets
Sht.Visible = xlSheetVisible
Næste Sht
Slut Sub
Ikke overraskende kan du oprette indlejrede For Every-Next-løkker. CountFed-proceduren går gennem hver celle i det brugte område på hvert regneark i hver åben projektmappe og viser en optælling af antallet af celler, der er formateret som fed:
Sub CountFed skrift()
Dim WBook Som arbejdsbog
Dim WSheet som arbejdsark
Dæmp celle som rækkevidde
Dim Cnt As Long
For hver WBook i arbejdsbøger
For hvert WSark i WBook.Worksheets
For hver celle i WSheet.UsedRange
Hvis Cell.Font.Bold = True, så Cnt = Cnt + 1
Næste celle
Næste WSark
Næste WBook
MsgBox Cnt & "fed celler fundet"
Slut Sub