VBA поддържа още един тип зацикляне в Excel 2016: преминаване през всеки обект в колекция от обекти. Колекцията, както може би знаете, се състои от множество обекти от един и същи тип. Например, Excel има колекция от всички отворени работни книги (колекцията Workbooks) и всяка работна книга има колекция от работни листове (колекцията Worksheets).
Когато трябва да преминете през всеки обект в колекция, използвайте структурата For Every-Next. Следният пример преглежда всеки работен лист в активната работна книга и изтрива работния лист, ако е празен:
Sub DeleteEmptySheets()
Dim WkSht като работен лист
Application.DisplayAlerts = False
За всеки WkSht в ActiveWorkbook.Worksheets
Ако WorksheetFunction.CountA(WkSht.Cells) = 0 Тогава
WkSht.Delete
Край, ако
Следваща WkSht
Application.DisplayAlerts = Вярно
Край под
В този пример променливата WkSht е обектна променлива, която представлява всеки работен лист в работната книга. Нищо специално за името на променливата WkSht; можете да използвате всяко име на променлива, което искате.
Кодът минава през всеки работен лист и определя празен лист чрез преброяване на непразните клетки. Ако този брой е нула, листът е празен и се изтрива. Забележете, че настройката DisplayAlerts е изключена, докато цикълът върши своето. Без това изявление Excel извежда предупреждение всеки път, когато лист предстои да бъде изтрит.
Ако всички работни листове в работната книга са празни, получавате грешка, когато Excel се опита да изтрие единствения лист. Обикновено бихте написали код за справяне с тази ситуация.
Ето още един пример за всеки следващ. Тази процедура използва цикъл, за да скрие всички работни листове в активната работна книга с изключение на активния лист.
Подскрити листове()
Dim Sht като работен лист
За всеки Sht в ActiveWorkbook.Worksheets
Ако Sht.Name <> ActiveSheet.Name Тогава
Sht.Visible = xlSheetHidden
Край, ако
Следваща Щ
Край под
Процедурата HideSheets проверява името на листа. Ако не е същото като името на активния лист, листът е скрит. Забележете, че свойството Visible не е булева. Това свойство всъщност може да приеме всяка от трите стойности, а Excel предоставя три вградени константи. Ако сте любопитни за третата възможност (xlVeryHidden), проверете системата за помощ.
Това, което става скрито, в крайна сметка трябва да се разкрие, така че ето макрос, който показва всички работни листове в активната работна книга:
Подпоказване на таблици()
Dim Sht като работен лист
За всеки Sht в ActiveWorkbook.Worksheets
Sht.Visible = xlSheetVisible
Следваща Щ
Край под
Не е изненадващо, че можете да създавате вложени цикли For Every-Next. Процедурата CountBold преминава през всяка клетка в използвания диапазон на всеки работен лист във всяка отворена работна книга и показва броя на клетките, които са форматирани като удебелен шрифт:
Под CountBold()
Dim WBook като работна тетрадка
Dim WSheet като работен лист
Затъмнена клетка като диапазон
Dim Cnt As Long
За всяка работна книга в работни тетрадки
За всеки WSheet в WBook.Worksheets
За всяка клетка в WSheet.UsedRange
Ако Cell.Font.Bold = True, тогава Cnt = Cnt + 1
Следваща клетка
Следващ WSheet
Следваща WBook
MsgBox Cnt & „открити са получерни клетки“
Край под