VBA styður enn aðra tegund af lykkju í Excel 2016: lykkja í gegnum hvern hlut í safni hluta. Safn, eins og þú kannski veist, samanstendur af fjölda hluta af sömu gerð. Til dæmis, Excel hefur safn af öllum opnum vinnubókum (vinnubókasafnið), og hver vinnubók hefur safn af vinnublöðum (vinnublaðasafnið).
Þegar þú þarft að fara í gegnum hvern hlut í safni skaltu nota For Every-Next uppbyggingu. Eftirfarandi dæmi fer í gegnum hvert vinnublað í virku vinnubókinni og eyðir vinnublaðinu ef það er tómt:
Sub DeleteEmptySheets()
Dim WkSht Sem vinnublað
Application.DisplayAlerts = False
Fyrir hverja WkSht í ActiveWorkbook.Worksheets
Ef WorksheetFunction.CountA(WkSht.Cells) = 0 Þá
WkSht.Delete
End If
Næsta WkSht
Application.DisplayAlerts = True
End Sub
Í þessu dæmi er breytan WkSht hlutbreyta sem táknar hvert vinnublað í vinnubókinni. Ekkert er sérstakt við breytuheitið WkSht; þú getur notað hvaða breytuheiti sem þú vilt.
Kóðinn fer í gegnum hvert vinnublað og ákvarðar tómt blað með því að telja óauðu hólf. Ef þessi tala er núll er blaðið tómt og því er eytt. Taktu eftir því að slökkt er á DisplayAlerts stillingunni á meðan lykkjan er að gera sitt. Án þeirrar fullyrðingar birtist Excel viðvörun í hvert sinn sem á að eyða blaði.
Ef öll vinnublöðin í vinnubókinni eru tóm færðu villu þegar Excel reynir að eyða eina blaðinu. Venjulega myndirðu skrifa kóða til að takast á við þær aðstæður.
Hér er annað For Every-Next dæmi. Þessi aðferð notar lykkju til að fela öll vinnublöð í virku vinnubókinni nema virka blaðinu.
Sub HideSheets()
Dim Sht Sem vinnublað
Fyrir hvert Sht í ActiveWorkbook.Worksheets
Ef Sht.Name <> ActiveSheet.Name Þá
Sht.Visible = xlSheetHidden
End If
Næsti Sht
End Sub
HideSheets aðferðin athugar nafn blaðsins. Ef það er ekki það sama og nafn virka blaðsins er blaðið falið. Taktu eftir því að eiginleiki Visible er ekki Boolean. Þessi eign getur í raun tekið á sig hvaða af þremur gildum sem er og Excel býður upp á þrjá innbyggða fasta. Ef þú ert forvitinn um þriðja möguleikann (xlVeryHidden), athugaðu hjálparkerfið.
Það sem verður falið verður á endanum að birtast, svo hér er fjölvi sem sýnir öll vinnublöð í virku vinnubókinni:
Undir UnhideSheets()
Dim Sht Sem vinnublað
Fyrir hvert Sht í ActiveWorkbook.Worksheets
Sht.Visible = xlSheetVisible
Næsti Sht
End Sub
Það kemur ekki á óvart að þú getur búið til hreiður fyrir hvern-næst lykkjur. CountBold aðferðin fer í gegnum hvern reit á notaða sviðinu á hverju vinnublaði í hverri opinni vinnubók og sýnir fjölda hólfa sem eru feitletruð:
Sub CountBold()
Dim WBook Sem vinnubók
Dimma WSheet Sem vinnublað
Dimm klefi sem svið
Dim Cnt As Long
Fyrir hverja WBook í vinnubókum
Fyrir hvert WSblað Í WBook.Worksheets
Fyrir hverja reit í WSheet.UsedRange
Ef Cell.Font.Bold = True Þá Cnt = Cnt + 1
Næsta klefi
Næsta WSblað
Næsta WBook
MsgBox Cnt & „feitletraðar frumur fundnar“
End Sub