Скачиваний:
27
Добавлен:
02.05.2014
Размер:
142.34 Кб
Скачать

Пример вложенных циклов For…Next

Dim sngC ' переменная C предназначается на роль "случайного числа"

Randomize ' инициализация генератора случайных чисел (рандомайз).

For A = 1 To 5

sngC = Rnd( )

For B = 1 To 10

Debug.Print sngC * Rnd( )

Next B

Next A

Операции, которые выполняет программа:

  • предварительная подготовка – код начинается с объявления переменной sngC и инициализации генератора случайных чисел;

  • начало внешнего цикла For…Next: VBA вызывает функцию Rnd, чтобы присвоить переменной sngC случайное значение;

  • начало внутреннего цикла For…Next: этот цикл вычисляет 10 других чисел повторяя вызов функции Rnd при каждом проходе цикла. Результат отображается в окне Immediate отладки (Debug);

  • завершение внутреннего цикла после выполнения им всех 10 вычислений.

Теперь снова продолжается выполнение внешнего цикла. Подчиняясь оператору Next A, программа возвращается к началу внешнего цикла; шаги второй и третий повторяются еще 4 раза.

Таким образом, например, составляя программу воспроизведения музыкальных произведений, можно сформировать случайный выбор 10 фрагментов из 5 компакт-дисков.

Оператор For… Next особенно важен при работе с массивами, например, при заполнении массива множеством вычисленных значений:

Sub Квадрат ()

Dim intКвадраты (14) As Integer

For a = 0 To 14

intКвадраты (a) = a * a

Next a

End Sub

Оператор For…Next очень удобно также использовать при обработке многомерных массивов, если организовать вложенные циклы так, чтобы каждый из них соответствовал одному измерению массива.

Важные замечания по поводу циклов For…Next

Старайтесь для ясности начинать цикл For… Next с единицы.

Исключения могут быть, когда идет работа с массивом.

В этом случае начало выбирается равным 0.

В операторе Next имя счетчика, завершающем цикл For… Next, имя переменной счетчика указывать необязательно, т. к. ключевое слово Next автоматически вычислит следующее значение счетчика и отошлет программу в начало структуры.

Однако всё-таки необходимо приучить себя включать имя счетчика в оператор Next, т. к. при этом даже в случае нескольких вложенных циклов For… Next можно сразу опознать, какому циклу принадлежит данный оператор Next.

Следует помнить, что, стоит допустить ошибку со счетчиком, и можно либо пропустить пару важных шагов, либо заставить цикл повторяться бесконечно.

Использование оператора цикла For Each… Next

Ключевым различием в использовании For Each… Next и For … Next является то, что в цикле For Each… Next не требуется указывать число повторений. В операторе For Each (для каждого элемента в группе) с помощью переменной элемент определяется тип объекта в семействе, а с помощью аргумента группа задается семейство, с которым нужно работать.

Структура представляет множество операторов, относящихся ко всем объектам в некотором семействе (как и структура цикла Do…Loop), но она проще в использовании.

Синтаксис цикла For Each… Next:

For Each элемент In группа

(операторы, выполняемые при каждом проходе цикла)

Next элемент

Например, семейство Blocks является семейством объектов Block, и каждый объект Block содержит неограниченное количество графических объектов типа Cone (конус) или 3Dface (3-х мерная поверхность). В этом фрагменте программного кода всего лишь отображается имя каждого объекта Block (objB) семейства Blocks:

Dim objB As Blocks

For Each objB In Blocks

Debug.Print objB.Name

Next objB

Соседние файлы в папке Лекции по информатике