- •9. Операторы цикла
- •Оператор цикла For–Next
- •Примеры использования оператора цикла For–Next
- •Оператор цикла Do–Loop
- •Примеры использования оператора цикла Do–Loop
- •Оператор цикла While–Wend
- •Оператор цикла For Each – Next
- •Примеры использования оператора цикла For Each – Next
- •Игровые примеры использования операторов цикла
- •Движущаяся диаграмма
- •Случайно мигающие ячейки
Оператор цикла While–Wend
Устаревшая конструкция оператора цикла с предусловием, оставлена в VBA для совместимости с предыдущими версиями. Проверяется условие: если ложное – выход из цикла. Затем выполняется тело цикла, и снова возврат на проверку условия.
While <условие>
< Операторы (тело цикла) >
Wend
Оператор цикла For Each – Next
Коллекция – это группа однородных объектов, например, листы рабочей книги, или элементы массива. Конструкция For Each – Next (Для Каждого – Следующий) – это оператор цикла For, у которого счетчик – элемент группы, нижняя и верхняя границы – первый и последний элементы в группе. Поэтому не нужно знать, сколько объектов в этой группе, оператор цикла переберет их по очереди.
Ниже приведен синтаксис конструкции For Each – Next.
For Each элемент In группа
[ инструкции ]
[ Exit For ] ′это досрочный выход из цикла
[ инструкции ]
Next [элемент]
Примеры использования оператора цикла For Each – Next
Напишем макрос SheetNames, который в окне функции MsgBox печатает имена всех листов активной рабочей книги. Для этого нам не нужно знать, сколько всего листов в открытой рабочей книге.
Sub SheetNames()
Dim n As Worksheet
For Each n In ActiveWorkbook.Worksheets
MsgBox n.Name
Next n
End Sub
Здесь используется переменная n типа Worksheet для хранения всех свойств и методов рабочего листа. Выражение «хранить методы» используется в значении «иметь доступ к методам». В VBA есть простые типы переменных (Double, Long, …), есть комбинации простых типов – пользовательские типы данных (структуры), есть типы переменных – классы, которые хранят свойства (данные) и методы (программы) для работы с этими данными. Здесь переменная n типа Worksheet – экземпляр класса Worksheet.
Временно изменим имя листа Гера на ЯГера, переставим корешки листов на рабочем листе по порядку ЯГера, Лист3, Лист2 и выполним макрос. На экране по очереди появились три окна функции MsgBox.
В Excel каждый лист имеет два имени: внутреннее и внешнее. При создании листа внутреннее и внешнее имя совпадает, например, Лист1. Внешнее имя отображается на корешке листа и может быть изменено.
Обратите внимание, что листы перебираются не по алфавиту, не по внутреннему порядку, а по порядку их корешков на рабочем листе.
Напишем макрос DeleteHiddenNames для удаления из рабочей книги всех скрытых имен, потому что сам Excel этого не делает. Особенно много скрытых имен остается после работы макроса «Поиск решения».
Sub DeleteHiddenNames()
Dim n As Name
Dim Count As Integer
For Each n In ActiveWorkbook.Names
If Not n.Visible Then
n.Delete
Count = Count + 1
End If
Next n
MsgBox "Скрытые имена в количестве " _
& Count & " удалены"
End Sub
Здесь используется переменная n типа Name для хранения всех свойств и методов имен объектов. Одно свойство – текст имени, другое свойство –Visible, быть видимым, метод – Delete, удалить переменную n, экземпляр класса Name. Конструкция If Not n.Visible Then… дословно переводится так: «Если у имени n не включено свойство «быть видимым», тогда…». Далее идет истинная ветка, которая удаляет невидимое имя и увеличивает счетчик удаленных имен.
Чтобы образовались скрытые имена, были решены две задачи оптимизации с использованием макроса «Поиск решения», а затем выполнен макрос DeleteHiddenNames. На экране появилось окно функции MsgBox.
