обязательно - ключевое слово Next автоматически вычислит следующее значение счетчика и отошлет VBA в начало структуры. Однако определенно стоит приучить себя включать имя счетчика в оператор Next.

Тогда даже в случае нескольких вложенных циклов For. . .Next вы всегда сможете с первого взгляда сказать, какому циклу принадлежит данный оператор Next. He меняйте значение счетчика внутри цикла For. . .Next. Поскольку счетчик является обычной переменной, можно - а иногда и заманчиво - создать программный код, меняющий значение счетчика. Не поддавайтесь!

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

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

Циклы For... Next и массивы

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

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

Dim intМассивКвадратов (14) As Integer

For a = 0 To 14

intMacсивКвадратов( a) = a * a

Next a

Этот пример программного кода начинается с объявления массива из 15 целых значений (15, а не 14, поскольку обычно VBA приписывает первому элементу в массиве индекс 0). Затем используется цикл For . . . Next, в котором каждому элементу массива, от 0 до 14, присваивается значение. Обратите внимание на то, что переменная а используется не только как счетчик, но и как индекс массива, указывающий на номер элемента в массиве.

Вложенные циклы For... Next

Подобно другим управляющим структурам VBA, циклы For. . .Next можно вкладывать один в другой - или в другие управляющие структуры, - так глубоко, как это необходимо. Следующий совершенно бесполезный фрагмент программного кода иллюстрирует эту возможность:

Dim sngC ' наверное, C означает "случайное число"

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

For A = 1 To 5

sngC = Rnd()

For B = 1 To 5

Debug.Print sngC * Rnd()

Next

Next A

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

1. Предварительная подготовка.

Программный код начинается с объявления переменной и инициализации генератора случайных чисел VBA.

2. Начало внешнего цикла For. . .Next.

VBA вызывает функцию Rnd, чтобы присвоить переменной sngC случайное значение.

3. Начало внутреннего цикла For. . .Next.

Этот цикл вычисляет пять других чисел, повторяя вызов функции Rnd при каждом проходе цикла. Результат отображается в окне Immediate.

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

Теперь снова продолжится выполнение внешнего цикла. Подчиняясь оператору Next

A, VBA возвращается в начало внешнего цикла.

5. Пп. 2 и 3 повторяются еще для четырех проходов внешнего цикла.

Этот пример, вероятно, тривиален, но его можно заставить выполнять очень полезную работу, если немного подправить. Допустим, вам нужно создать мультимедиа-программу, случайным образом выбирающую пять компакт-дисков и проигрывающую по пять случайным образом выбранных фрагментов с каждого из дисков. В предположении, что вы знаете, как программировать выбор компакт-дисков и воспроизведение записей, предыдущий пример будет как раз подходящей заготовкой.

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

Немедленный выход с помощью Exit For

Оператор Exit For предназначен для немедленного прекращения выполнения цикла до того, как программа доберется до его конца. Обычно этот оператор используется в условном выражении (If . . . Then или Select Case), вложенном в главный цикл For . . .Next.

Удобно использовать Exit For, когда проверяются массивы, есть ли в них недопустимые значения, когда неправильные данные приводят к прекращению выполнения процесса.

Скажем, вы узнали о том, что какой-то злой гений ввел неправильную информацию в ваш прайс-лист и при этом оставлял свой "фирменный" знак. Поэтому при внесении изменений в цены из-за инфляции вам придется проверить для каждого из массивов, не испорчены ли в нем данные. Вот пример программного кода, который делает всю эту работу:

For р = 1 То varДлинаМассива

If varЦена(р) - "Здесь был Ваня!" Then

MsgBox "Данные испорчены."

Exit For

End If

varЦена(р) = varЦена(р) * sngCOLA

Next p

Вы читаете VBA для чайников
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату