
- •Вопрос 8. Оператор цикла For Each. Назначение, правила синтаксиса и механизм выполнения. Коллекции объектов. Способы доступа к объектам коллекции.
- •Visual Basic вычисляет коллекцию только один раз — перед началом цикла. Если в блоке операторов изменяетсяelement или group, то эти изменения не оказывает влияния на повторение цикла.
- •Вопрос 9. Оператор цикла с параметром For. Назначение, правила синтаксиса и механизм выполнения. Коллекции объектов. Доступ к объектам коллекции с использованием For.
- •Вопрос 10. Оператор выбора по условию Select…Case. Назначение, правила синтаксиса и механизм выполнения. Правила записи условий. Отличие от условного оператора.
Вопрос 9. Оператор цикла с параметром For. Назначение, правила синтаксиса и механизм выполнения. Коллекции объектов. Доступ к объектам коллекции с использованием For.
Повторяет группу операторов заданное количество раз.
For counter [ As datatype ] = start To end [ Step step ]
[ statements ]
[ Continue For ]
[ statements ]
[ Exit For ]
[ statements ]
Next [ counter ]
Часть |
Описание |
counter |
Требуется в операторе For. Числовая переменная. Управляющая переменная цикла. |
datatype |
Необязательный параметр. Тип данных counter. |
start |
Обязательное. Числовое выражение. Начальное значение counter. |
end |
Обязательное. Числовое выражение. Конечное значение counter. |
step |
Необязательный параметр. Числовое выражение. Шаг, с которым counter увеличивается при каждом прохождении цикла. |
statements |
Необязательный параметр. Одно или несколько выражений между For и Next, выполняемых указанное число раз. |
Continue For |
Необязательный параметр. Передает управление следующей итерации цикла. |
Exit For |
Необязательный параметр. Передает управление из цикла For. |
Next |
Обязательное. Завершает определение цикла For. |
Структура For... Next используется при необходимости повторения набора инструкций несколько раз.
При начале цикла For...Next Visual Basic оценивает start, end и step. Это единственный раз, когда оцениваются эти значения. Затем назначается значение start переменной counter. Перед выполнением блока операторов сравниваютсяcounter и end. Если значение counter превысило значение end (или меньше его при отрицательном значении step), цикл For завершается и управление передается оператору, следующему за оператором Next. В противном случае выполняется блок операторов.
Каждый раз при обнаружении оператора Next Visual Basic увеличивает counter на step и возвращается к оператору For.После этого сравниваются counter и end, и в зависимости от результата происходит либо выполнение блока, либо выход из цикла. Этот процесс продолжается до тех пор, пока counter не превысит end, или не встретится оператор Exit For.
Цикл не останавливается до тех пор, пока counter не превысит end. Если counter равен end, то цикл продолжается.Сравнением, определяющим, следует ли выполнять блок, является counter <= end для положительного step и counter>= end для отрицательного step.
Изменение значения counter внутри тела цикла может осложнить читаемость и отладку кода. Изменение значенийstart, end или step не влияет на значения итерации, определенные при первом входе в цикл.
Циклы используются в ситуациях, когда нам нужно выполнить какое-либо
действие несколько раз. Первая ситуация — мы знаем, сколько раз нужно
выполнить определенное действие, в этом случае используется конструкция
For...Next:
For iCounter = 1 to 10
MsgBox "Счетчик: " & iCounter
Next
Чтобы указать, насколько должно прирастать значение счетчика, использует-
ся ключевое слово Step:
For iCounter = 1 to 10 Step 2
MsgBox "Счетчик: " & iCounter
Next
Можно и уменьшать исходное значение счетчика:
For iCounter = 10 to 1 Step -2
MsgBox "Счетчик: " & iCounter
Next
Для безусловного выхода из конструкции For...Next используется команда
Exit For:
VStop = InputBox("Введите значение останова")
VInput = CInt(VStop)
For iCounter = 1 to 10
MsgBox "Счетчик: " & iCounter
If iCounter =VInput Then Exit For
Next
Очень часто в VBA требуется сделать какое-нибудь действие со всеми элементами коллекции или массива — перебрать все открытые документы, все листы Excel, все ячейки в определенном диапазоне и т. п. Для того чтобы пройти циклом по всем элементам коллекции, используется команда
For Each...Next:
For Each oWbk in Workbooks
MsgBox oWbk.Name
Next
При использовании этого приема можно очень просто найти и получить
ссылку на нужный нам объект: (Доступ к объектам коллекции с использованием For)
For Each oWbk in Workbooks
If oWbk.Name = "Сводка.xls" Then
Set oMyWorkBook = oWbk
Exit For
End If
Next