Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
44
Добавлен:
16.03.2016
Размер:
30.52 Кб
Скачать

Вопрос 8. Оператор цикла For Each. Назначение, правила синтаксиса и механизм выполнения. Коллекции объектов. Способы доступа к объектам коллекции.

Повторяет группу операторов применительно к каждому элементу коллекции.

For Each element [ As datatype ] In group

[ statements ]

[ Continue For ]

[ statements ]

[ Exit For ]

[ statements ]

Next [ element ]

Термин

Определение

element

Обязателен в операторе For Each. Необязателен в операторе Next. Переменная. Используется для циклического прохода (итерации) элементов коллекции.

datatype

Обязателен, если еще не объявлен элемент element. Тип данных element.

group

Обязательный. Объектная переменная. Указывает на коллекцию, применительно к элементам которой будут повторяться операторы statements.

statements

Необязательный. Один или несколько операторов, стоящих между операторами For Each и Next и выполняющихся применительно к каждому элементу group.

Continue For

Необязательный. Передача управления в начало цикла For Each.

Exit For

Необязательный. Передача управления из цикла For Each.

Next

Обязательный. Завершение определения цикла For Each.

Цикл For Each...Next используется при необходимости повтора набора инструкций для каждого элемента коллекции или массива.

Visual Basic вычисляет коллекцию только один раз — перед началом цикла. Если в блоке операторов изменяетсяelement или group, то эти изменения не оказывает влияния на повторение цикла.

Когда переменной element будут присвоены все элементы коллекции, цикл For Each остановится и управление будет передано оператору, следующему за оператором Next.

Если element не был объявлен вне цикла, то его нужно объявить в операторе For Each. Можно объявить тип elementявным образом при помощи оператора As, или можно использовать определение типа для назначения типа. В этом случае областью действия element является основная часть цикла. В то же время нельзя определять element и внутри, и снаружи цикла.

Можно дополнительно указать element в инструкции Next. Это повышает удобочитаемость программы, особенно если в ней имеются вложенные циклы For Each. При этом следует указать ту же переменную, что и в соответствующем операторе For Each.

Можно избежать изменения значения element внутри цикла. Это может сделать его более сложным для чтения и отладку кода. Изменение значения group не влияет на коллекцию или ее элементы, которые были определены в начале цикла.

Очень часто в VBA требуется сделать какое-нибудь действие со всеми элементами коллекции или массива — перебрать все открытые документы, все листы Excel, все ячейки в определенном диапазоне и т. п. Для того чтобы пройти циклом по всем элементам коллекции, используется команда

For Each...Next: (Первый способ доступа к объектам коллекции)

For Each oWbk in Workbooks

MsgBox oWbk.Name

Next

При использовании этого приема можно очень просто найти и получить

ссылку на нужный нам объект:

For Each oWbk in Workbooks

If oWbk.Name = "Сводка.xls" Then

Set oMyWorkBook = oWbk

Exit For

End If

Next

В этом случае мы проходим циклом по всем элементам коллекции Workbooks (т. е. по открытым рабочим книгам в Excel), для каждой книги проверяем ее имя и, если нашли книгу с именем "Сводка.xls", получаем на нее ссылку и выходим из цикла. Коллекция рабочих книг — это специальная коллекция, которая умеет производить поиск в себе по имени элемента, поэтому, в принципе, можно было обойтись такой строкой: (Второй способ доступа к объектам коллекции)

Set oMyWorkBook = Workbooks("Сводка.xls")

Но для многих других коллекций без конструкции For Each...Next не обой-

тись.

Соседние файлы в папке программирование_1