VBA tukee vielä toista tyyppiä silmukoita Excel 2016:ssa: silmukkaa jokaisen objektikokoelman objektien läpi. Kokoelma, kuten ehkä tiedät, koostuu useista samantyyppisistä esineistä. Esimerkiksi Excelissä on kokoelma kaikkia avoimia työkirjoja (Työkirjat-kokoelma) ja jokaisessa työkirjassa on kokoelma laskentataulukoita (Työkirjat-kokoelma).
Kun sinun on selattava kokoelman jokaisen objektin läpi, käytä For Every-Next -rakennetta. Seuraava esimerkki käy läpi jokaisen aktiivisen työkirjan laskentataulukon ja poistaa laskentataulukon, jos se on tyhjä:
Sub DeleteEmptySheets()
Dim WkSht Työtaulukona
Application.DisplayAlerts = False
Jokaiselle ActiveWorkbook.Worksheetsin WkSht:lle
Jos WorksheetFunction.CountA(WkSht.Cells) = 0 Sitten
WkSht.Delete
Loppu Jos
Seuraava WkSht
Application.DisplayAlerts = Tosi
Lopeta ala
Tässä esimerkissä muuttuja WkSht on objektimuuttuja, joka edustaa jokaista työkirjan laskentataulukkoa. Muuttujan nimessä WkSht ei ole mitään erityistä; voit käyttää mitä tahansa haluamasi muuttujan nimeä.
Koodi kiertää jokaisen laskentataulukon läpi ja määrittää tyhjän arkin laskemalla ei-tyhjät solut. Jos luku on nolla, taulukko on tyhjä ja se poistetaan. Huomaa, että DisplayAlerts-asetus on kytketty pois päältä silmukan suorittaessa tehtävänsä. Ilman tätä lausuntoa Excel antaa varoituksen joka kerta, kun taulukkoa ollaan poistamassa.
Jos kaikki työkirjan laskentataulukot ovat tyhjiä, saat virheilmoituksen, kun Excel yrittää poistaa ainoan taulukon. Normaalisti kirjoitat koodin tilanteen käsittelemiseksi.
Tässä on toinen For Every-Next -esimerkki. Tämä toimenpide piilottaa kaikki aktiivisen työkirjan laskentataulukot aktiivisen taulukon lisäksi silmukan avulla.
Sub HideSheets()
Dim Sht Työtaulukona
Jokaiselle ActiveWorkbook.Worksheets Sht:lle
Jos Sht.Name <> ActiveSheet.Name Then
Sht.Visible = xlSheetHidden
Loppu Jos
Seuraava Sht
Lopeta ala
HideSheets-toiminto tarkistaa taulukon nimen. Jos se ei ole sama kuin aktiivisen taulukon nimi, taulukko piilotetaan. Huomaa, että Visible-ominaisuus ei ole Boolen. Tämä ominaisuus voi itse asiassa ottaa minkä tahansa kolmesta arvosta, ja Excel tarjoaa kolme sisäänrakennettua vakiota. Jos olet kiinnostunut kolmannesta mahdollisuudesta (xlVeryHidden), tarkista ohjejärjestelmä.
Piilotetun on lopulta paljastettava, joten tässä on makro, joka paljastaa kaikki aktiivisen työkirjan laskentataulukot:
Sub UnhideSheets()
Dim Sht Työtaulukona
Jokaiselle ActiveWorkbook.Worksheets Sht:lle
Sht.Visible = xlSheetVisible
Seuraava Sht
Lopeta ala
Ei ole yllättävää, että voit luoda sisäkkäisiä For Every-Next -silmukoita. CountBold-toiminto kiertää jokaisen käytetyn alueen jokaisen solun läpi jokaisessa avoimessa työkirjassa ja näyttää lihavoituina muotoiltujen solujen lukumäärän:
Sub CountBold()
Himmeä WBook työkirjana
Himmeä WSheet laskentataulukona
Dim Cell As Range
Dim Cnt As Long
Jokaiselle työkirjoissa olevalle WBookille
Jokaiselle WBook.Worksheets-sivulle
Jokaiselle WSheet.UsedRange-solulle
Jos Cell.Font.Bold = tosi, Cnt = Cnt + 1
Seuraava solu
Seuraava WSheet
Seuraava WBook
MsgBox Cnt & " lihavoituja soluja löytyi"
Lopeta ala