VBA toetab programmis Excel 2016 veel üht teist tüüpi silmuste loomist: objektide kogumi iga objekti silmuse läbimist. Nagu võib-olla teate, koosneb kollektsioon paljudest sama tüüpi objektidest. Näiteks Excelis on kõigi avatud töövihikute kogu (kogu Töövihikud) ja igas töövihikus on töölehtede kogu (kogu Töölehed).
Kui teil on vaja kogu kogus olevaid objekte läbi vaadata, kasutage struktuuri Iga järgmise jaoks. Järgmine näide vaatab läbi aktiivse töövihiku iga töölehe ja kustutab töölehe, kui see on tühi:
Sub DeleteEmptySheets()
Dim WkSht töölehena
Application.DisplayAlerts = Vale
Iga ActiveWorkbook.Worksheets WkSht jaoks
Kui WorksheetFunction.CountA(WkSht.Cells) = 0 Siis
WkSht.Delete
Lõpeta Kui
Järgmine WkSht
Application.DisplayAlerts = Tõene
Lõpeta alam
Selles näites on muutuja WkSht objektimuutuja, mis esindab iga töölehte töövihikus. Muutuja nimes WkSht pole midagi erilist; võite kasutada mis tahes muutuja nime, mis teile meeldib.
Kood liigub läbi iga töölehe ja määrab tühja lehe, loendades mittetühjad lahtrid. Kui see arv on null, on leht tühi ja see kustutatakse. Pange tähele, et DisplayAlertsi säte on välja lülitatud, kui tsükkel oma tööd teeb. Ilma selle avalduseta kuvab Excel hoiatuse iga kord, kui lehte hakatakse kustutama.
Kui kõik töövihiku töölehed on tühjad, kuvatakse tõrketeade, kui Excel üritab kustutada ainsat lehte. Tavaliselt kirjutaksite selle olukorra lahendamiseks koodi.
Siin on veel üks näide iga järgmise jaoks. See protseduur kasutab tsüklit, et peita kõik aktiivses töövihikus olevad töölehed peale aktiivse lehe.
Sub HideSheets()
Dim Sht töölehena
Iga Sht jaoks ActiveWorkbook.Worksheetsis
Kui Sht.Name <> ActiveSheet.Name Siis
Sht.Visible = xlSheetHidden
Lõpeta Kui
Järgmine Sht
Lõpeta alam
Protseduur HideSheets kontrollib lehe nime. Kui see ei kattu aktiivse lehe nimega, on leht peidetud. Pange tähele, et atribuut Visible ei ole Boole'i väärtus. See atribuut võib tegelikult võtta mis tahes kolmest väärtusest ja Excel pakub kolme sisseehitatud konstanti. Kui olete huvitatud kolmandast võimalusest (xlVeryHidden), vaadake abisüsteemi.
See, mis peidetakse, tuleb lõpuks peita, nii et siin on makro, mis toob nähtavale kõik aktiivse töövihiku töölehed:
Alam UnhideSheets()
Dim Sht töölehena
Iga Sht jaoks ActiveWorkbook.Worksheetsis
Sht.Visible = xlSheetVisible
Järgmine Sht
Lõpeta alam
Pole üllatav, et saate luua pesastatud For Every-Next silmuseid. Protseduur CountBold läbib iga avatud töövihiku iga töölehe kasutatud vahemiku iga lahtri ja kuvab paksus kirjas vormindatud lahtrite arvu:
Sub CountBold()
Hämar WBook töövihikuna
Hämar WSheet töölehena
Dim Cell as Range
Dim Cnt As Long
Iga töövihiku töövihikute jaoks
Iga W-lehe jaoks rakenduses WBook.Worksheets
Iga lahtri WSheet.UsedRange jaoks
Kui Cell.Font.Bold = tõene, siis Cnt = Cnt + 1
Järgmine lahter
Järgmine WSheet
Järgmine WBook
MsgBox Cnt & "leiti rasvased lahtrid"
Lõpeta alam