bc284d54

Инструкция For Each...Next


Инструкция For Each...Next повторяет набор инструкций для всех объектов семейства или для всех элементов массива. Visual Basic автоматически задает переменную во время каждого выполнения цикла. Например, в следующей процедуре закрываются все формы, за исключением формы, содержащей текущую процедуру.

Sub CloseForms()

For Each frm In Application.Forms

If frm.Caption <> Screen. ActiveForm.Caption Then frm.Close

Next

End Sub

В следующих строках программы выполняется цикл для всех элементов массива, и их значения присваиваются индексной переменной I.

Dim TestArray(10) As Integer, I As Variant

For Each I In TestArray

TestArray(I) = I

Next I

Циклы по диапазонам ячеек

Инструкция For Each...Next используется также для организации циклов по диапазонам ячеек. Следующая процедура выполняет цикл по диапазону A1:D10 на листе Sheet1 и присваивает любому числу, имеющему абсолютное значение меньше 0.01, значение 0 (ноль).

Sub RoundToZero()

For Each myObject in myCollection

If Abs(myObject.Value) < 0.01 Then myObject.Value = 0

Next

End Sub

Выход из цикла For Each...Next до его завершения

Допускается выход из цикла For Each...Next с помощью инструкции Exit For. Например, если возникает ошибка, для ее проверки можно использовать инструкцию Exit For в блоке True инструкции If...Then...Else или инструкции Select Case. Если ошибки нет, инструкция If...Then...Else имеет значение False, и выполнение цикла продолжается как ожидалось.

В следующем примере проверяется первая ячейка диапазона A1:B5, которая не содержит числового значения. Когда такая ячейка найдена, на экран выводится сообщение, и Exit For завершает цикл.

Sub TestForNumbers()

For Each myObject In MyCollection

If IsNumeric(myObject.Value) = False Then

MsgBox "Объект не содержит числового значения."

Exit For

End If

Next c

End Sub



Содержание раздела