A VBA egy másik típusú hurkolást is támogat az Excel 2016-ban: az objektumok gyűjteményében lévő egyes objektumok áthurkolását. Egy gyűjtemény, amint azt Ön is tudja, számos azonos típusú objektumból áll. Például az Excel tartalmazza az összes nyitott munkafüzet gyűjteményét (a Munkafüzetek gyűjteményét), és minden munkafüzetben van egy munkalapgyűjtemény (a Munkalapok gyűjtemény).
Ha egy gyűjtemény minden egyes objektumán keresztül kell végigfutnia, használja a For Every-Next struktúrát. A következő példa végigfut az aktív munkafüzet minden egyes munkalapján, és törli a munkalapot, ha az üres:
Sub DeleteEmptySheets()
Dim WkSht munkalapként
Application.DisplayAlerts = Hamis
Minden egyes WkSht-hez az ActiveWorkbook.Worksheetsben
Ha WorksheetFunction.CountA(WkSht.Cells) = 0 Akkor
WkSht.Delete
Vége Ha
Következő WkSht
Application.DisplayAlerts = Igaz
Vége Sub
Ebben a példában a WkSht változó egy objektumváltozó, amely a munkafüzet minden egyes munkalapját reprezentálja. Semmi különös a WkSht változónévben; tetszőleges változónevet használhat.
A kód végigfut minden munkalapon, és a nem üres cellák megszámlálásával meghatároz egy üres lapot. Ha ez a szám nulla, a lap üres, és törlődik. Figyelje meg, hogy a DisplayAlerts beállítás ki van kapcsolva, miközben a hurok végzi a dolgát. E nélkül az utasítás nélkül az Excel minden alkalommal figyelmeztetést jelenít meg, amikor egy munkalap törlésre készül.
Ha a munkafüzetben lévő összes munkalap üres, hibaüzenet jelenik meg, amikor az Excel megpróbálja törölni az egyetlen lapot. Általában kódot ír a helyzet kezelésére.
Íme egy másik példa az Every-Next-re. Ez az eljárás egy hurkot használ az aktív munkafüzet összes munkalapjának elrejtésére, kivéve az aktív munkalapot.
Sub HideSheets()
Dim Sht Munkalapként
Minden egyes Sht-hez az ActiveWorkbook.Worksheetsben
Ha Sht.Name <> ActiveSheet.Name Akkor
Sht.Visible = xlSheetHidden
Vége Ha
Következő Sht
Vége Sub
A HideSheets eljárás ellenőrzi a lap nevét. Ha nem egyezik az aktív munkalap nevével, a munkalap el van rejtve. Figyelje meg, hogy a Visible tulajdonság nem logikai érték. Ez a tulajdonság valójában három érték bármelyikét felveheti, és az Excel három beépített állandót biztosít. Ha kíváncsi a harmadik lehetőségre (xlVeryHidden), nézze meg a Súgót.
Ami el van rejtve, annak végül fel kell fednie, ezért itt van egy makró, amely felfedi az összes munkalapot az aktív munkafüzetben:
Al UnhideSheets()
Dim Sht Munkalapként
Minden egyes Sht-hez az ActiveWorkbook.Worksheetsben
Sht.Visible = xlSheetVisible
Következő Sht
Vége Sub
Nem meglepő, hogy beágyazott For Every-Next ciklusokat hozhat létre. A CountBold eljárás minden megnyitott munkafüzet minden munkalapján végigfut a használt tartomány minden celláján, és megjeleníti a félkövérre formázott cellák számát:
Sub CountBold()
Dim WBook As Workbook
Dim WSheet Munkalapként
Dim Cell As Range
Dim Cnt As Long
Minden egyes WBook In Workbooks-hoz
A WBook.Worksheets egyes WSheetjeihez
A WSheet.UsedRange minden egyes cellájához
Ha Cell.Font.Bold = igaz, akkor Cnt = Cnt + 1
Következő cella
Következő WSheet
Következő WBook
MsgBox Cnt és „félkövér cellák találhatók”
Vége Sub