Повторение неопределенное число раз: циклы Do

В VBA имеется очень мощная инструкция для создания в процедурах и функциях циклических структур, повторяющихся неопределенное число раз. Все такие циклы создаются с помощью единственной инструкции — инструкции Do. Она обладает такими возможностями и такой гибкостью, что у нее фактически четыре конструкции, относящиеся к двум основным категориям.

Эти категории состоят, из циклов Do, которые проверяют условие определителя перед выполнением тела цикла, и, во-вторых, из тех циклов Do, которые проверяют это условие после выполнения тела цикла. Независимо от того, проверяется ил определитель до или после выполнения тела цикла, существует два способа контролировать, сколько раз выполняется неопределенный цикл.

 

  • Циклы, контролируемые счетчиками. В этом случае тело цикла выполняется, пока значение некоторого счетчика находится ниже или выше указанной границы; в этом есть определенное сходство с циклов For .. Next, за исключением того, что на программисте лежит ответственность за инициализацию этого счетчика, а также за увеличение или уменьшение его значения. Такие циклы Do имеет смысл писать, когда счетчик не является регулярным, а также когда нельзя определить конечную границу, пока не началось выполнение самого цикла. Например, требуется пройти первые 16 строк листа, иногда увеличивая за один раз значение строки на 1, а иногда за один раз – на 2. В связи с тем, увеличение номера строка (то есть шаг счетчика) меняется, цикл For .. Next использовать нельзя; вместо него надо исследовать цикл Do.
  • Циклы, контролируемые событиями. В этом случае значением определителя имеет значение True или False, в зависимости от некоторого события или действия, имевшего место во время выполнения цикла. Например, вы написали цикл, выполняемый неопределенное число раз, пока пользователь не ведет известное число в диалоговом окне. Ввод такого числа как раз и является тем событием, которое завершит цикл. А вот другой пример: можно выполнять операции над ячейками листа, пока не будет достигнута пустая ячейка. Переход в пустую ячейку и будет событием, завершающим цикл.

 

Циклы с проверкой условия перед выполнением.

Чтобы условия определителя проверялись перед выполнением тела цикла, надо логическое выражение определителя просто поместить в начале инструкций, составляющих тело цикла. Это можно реализовать с помощью ключевых слов While и Until.