Повторяет заданную последовательность операторов для каждого элемента массива или набора.
Синтаксис:
For Each элемент In группа тело цикла Next [элемент]
Здесь элемент - переменная, которая пробегает в качестве значений элементы коллекций или массива. Для коллекций элемент может быть переменной типа Variant, переменной типа Object или переменной (объектом) некоторого класса. В случае цикла по массиву элемент обязан быть переменной типа Variant. Группа - это имя набора объектов (чаще всего это коллекция объектов) или массива, для элементов которых выполняется цикл. Цикл не применим для массивов, тип элементов которых определен пользователем, так как такие элементы не могут быть значениями переменной типа Variant. В таких массивах можно использовать цикл вида For … Next. Тело цикла - последовательность операторов, выполняемая для каждого элемента набора или массива, - может содержать операторы Exit For, позволяющие прервать выполнение цикла и передать управление оператору, следующему за Next (обычно такой выход происходит при выполнении некоторого условия, проверяемого в операторе If…Then…Else). Указывать переменную элемент после ключевого слова Next не обязательно, но желательно.
Примеры.
В примере создается коллекция, число элементов которой и сами элементы выбираются случайным образом. Затем эта коллекция копируется в динамический массив, размерность которого увеличивается в процессе копирования. На последнем этапе массив распечатывается. Циклы типа For …Each прекрасно работают в подобных ситуациях:
Public Sub ForEach1() Dim X As New Collection Dim Y() As Integer Dim item As Variant Dim i As Integer, Size As Integer
'Инициализация коллекции Randomize Size = Int(21 * Rnd) For i = 1 To Size X.Add Int(11 * Rnd) Next i
'Копирование коллекции в динамический массив Size = 1 For Each item In X ReDim Preserve Y(1 To Size) Y(Size) = item Size = Size + 1 Next item
'Печать элементов динамического массива For Each item In Y Debug.Print item Next item End Sub
Кроме рассмотренных управляющих операторов VBA содержит доставшиеся в наследство от прежних версий операторы перехода по метке GoTo, перехода по метке с возвратом GoSub...Return и условные операторы перехода по меткам On...GoSub и On...GoTo. Мы никогда не пользуемся этими операторами.