Книга: VBA для чайников
Вложенные циклы For... Next
Вложенные циклы 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 очень удобно при обработке многомерных массивов, если организовать циклы так, чтобы каждый из них соответствовал одному измерению массива.
- Forced writes - палка о двух концах
- Next transaction
- Next attachment ID
- Next header page
- Forced Writes
- Жизненные циклы продуктов
- 1.2.6. Циклы и ветвление
- Chapter 15. Graphical User Interfaces for Iptables
- What's next?
- What NAT is used for and basic terms and expressions
- Information request
- SCTP Generic header format