Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA 9 Операторы цикла.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
164.86 Кб
Скачать

Оператор цикла 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.