Синтаксис этого вида цикла выглядит, следующим образом (в квадратные скобки заключены необязательные элементы синтаксической конструкции):
For <счетчик> = <начальноеЗначение>
То <конечноеЗначение>
[Step <приращение>]
<блокОператоров> Next [<счетчик>]
Несколько пояснений к приведенному описанию:
<приращение> — может быть как положительным, так и отрицательным числом. Если использовать отрицательное приращение, то конечное значение должно быть меньше либо равно начальному значению для того, чтобы тело цикла выполнилось хотя бы один раз;
после завершения работы цикла For. . .Next переменная, которая использовалась в качестве счетчика, получает значение, обязательно превосходящее конечное значение в том случае, если приращение положительно, и строго меньшее конечного значения, если приращение отрицательно;
если начальное и конечное значения совпадают, тело цикла выполняется лишь один раз.
Рассмотрим еще одну разновидность цикла For. . .Next, часто использующуюся в VBA при обработке объектов, составляющих
массив
или
семейство
однородных объектов. В этой разновидности цикла счетчик отсутствует, а тело цикла выполняется для каждого элемента массива или семейства объектов. Вот синтаксис такого цикла:
For Each <элемент> In <совокупность>
<блокОператоров>
Next [<элемент>]
где:
<элемент> — это переменная, используемая для ссылки на элементы семейства объектов;
<совокупность> — это имя массива или семейства.
Приведем пример использования подобного цикла. Следующая процедура предназначается для выдачи на печать списка всех полей для всех таблиц текущей открытой базы данных:
Public Sub EnumerateAllFields()
Dim MyBase As Database
Dim tdf As TableDef, fid As Field
Set MyBase = CurrentDb()
For Each tdf In MyBase.TableDefs
Debug.Print "Таблица: " & tdf.Name
For Each fid In tdf.Fields
Debug.Print " Поле: "