Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика_4 / Использование Visual Basic for Applications / Использование Visual Basic for Applications.doc
Скачиваний:
101
Добавлен:
23.02.2015
Размер:
731.65 Кб
Скачать

5.8.2. Инструкции циклов

5.8.2.1. For...Next

Управляющий оператор For...Next предназначен для циклического выполнения некоторой последовательности действий заданное число раз. Его общий синтаксис представлен ниже.

For счетчик = начальное_значение To конечное_значение [Step шаг] Тело цикла

Next [счетчик]

Здесь счетчик – это переменная, называемая переменной цикла. Ее начальное значение (при первой инициализации цикла) равно значению, указанному в переменной (или константе). После каждого прохождения цикла ее значение увеличивается на величину шага; если шаг не задан, то она увеличивается на единицу. Признаком конца цикла служит слово Next, после которого может стоять имя переменной-счетчика, а может и не стоять – на работоспособности программы это не отразится. Кстати, в отличие от некоторых других языков программирования, как счетчик, так и шаг цикла могут быть не только целыми, но и вещественными числами. В тело цикла можно включить оператор Exit For, при его выполнении происходит безусловный выход из цикла, и программа выполняет действие, следующее за оператором Next.

Инструкцию For...Next можно, например, использовать для присвоения значений элементам массива.

Option Base 1

Sub Example()

Dim massif(100) As Single

Dim i As Integer

For i = 2 To 100

massif(i) = massif(i - 1) + 1.45

Next

End Sub

В этом примере каждому последующему элементу массива присваивается значение на 1,45 большее, чем значение предыдущего. Нумерация элементов массива начинается с единицы, по умолчанию при инициализации все элементы массива равны нулю.

5.8.2.2. Do...Loop

Оператор Do...Loop предназначен для организации циклов с заранее неизвестным числом повторений. Его синтаксис таков:

Do [While логическое_выражение]

Тело цикла

Loop

Или второй вариант синтаксиса этого оператора:

Do

Тело цикла

Loop While логическое_выражение

Логическое выражение может быть логической переменной, константой (False или True) или даже целым выражением, возвращающим логическое значение. Цикл выполняется до тех пор, пока это логическое выражение имеет значение True, т. е. истина. Отличие этих двух форм цикла в том, что в первом случае условие проверяется перед прохождением цикла, а во втором случае – после. Таким образом, во втором случае цикл будет пройден хотя бы один раз. Разновидностью этого цикла является цикл, содержащий в себе ключевое слово Until вместо While. Такой цикл выполняется до тех пор, пока логическое выражение после Until не станет равным True, т. е. пока оно имеет значение False — ложь.

Оператор Exit Do, так же как и в случае с циклом ForNext, позволяет досрочно выйти из цикла. Как всегда, выражение в квадратных скобках можно опустить, очевидно, в таком случае, если нигде не встречается оператор Exit Do, цикл будет повторяться бесконечное число раз.

5.8.2.3. While...Wend

Инструкция While...Wend очень похожа на предыдущую и выполняет те же функции, но менее гибка, чем она. Синтаксис инструкции имеет следующий вид.

While логическое_выражение

Тело цикла

Wend

While…Wend действует точно так же, как и Do While…Loop, т. е. повторяется, пока логическое выражение истинно, а проверка условия происходит в начале цикла. Приведем пример еще нескольких возможных реализаций процедуры присвоения значений элементам массива при помощи описанных выше инструкций.

Sub Example2()

Dim massif(100) As Single

Dim i As Integer

i = 2

Do

massif(i) = massif(i - 1) + 1.45

i = i + 1

Loop While i <= 100

End Sub

Sub Example3()

Dim massif(100) As Single

Dim i As Integer

i = 2

Do

massif(i) = massif(i - 1) + 1.45

i = i + 1

Loop Until i > 100

End Sub

Sub Example4()

Dim massif(100) As Single

Dim i As Integer

i = 2

While i <= 100

massif(i) = massif(i - 1) + 1.45

i = i + 1

Wend

End Sub

Как видим, если раньше счетчик цикла увеличивался на единицу автоматически, то сейчас нам приходится делать это в теле цикла. Кроме того, в зависимости от того, какое ключевое слово, While или Until, было нами использовано, изменяется и условие окончания (для Until) или продолжения (для while) цикла.

5.8.2.4. For Each...Next

Это еще одна инструкция цикла, которую можно перевести с английского языка примерно как «Для каждого … что-то сделать». Прежде, чем говорить о ней, нужно ввести понятие коллекции, широко использующееся в VBA. Коллекции объектов – это некий улучшенный аналог массивов переменных. Каждая коллекция представляет собой объект, который является контейнером для множества (семейства) других объектов одного и того же типа. Например, объект Worksheets (рабочие листы) содержит в себе все объекты Worksheet (рабочий лист), содержащиеся в данной книге. Коллекция позволяет определить элемент семейства по индексу (по номеру) или по имени. Некоторые коллекции допускают добавление или удаление элементов, другие не допускают.

Инструкция For Each...Next позволяет выполнить одну и ту же последовательность действий для всех объектов коллекции или для всех элементов массива. Эта инструкция удобна, когда точно неизвестно число составляющих коллекции или массива. Она имеет вид:

For Each элемент In массив_или_коллекция

Тело цикла

Next [элемент]

Для коллекции элемент может быть либо типа Variant, либо класса элементов, составляющих коллекцию, для массива же только типа Variant.

Следующий пример закрывает все рабочие книги.

Sub ForEachExample ( )

Dim Book As Object

For Each Book In Workbooks

Book. Close

Next Book

End Sub

А в этом примере все элементы массива заполняются единицами.

Sub ForEachExample2()

Dim Counter

Dim Massif As Integer

For Each Counter In Massif

Counter = 1

Next

End Sub