Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование VBA.pdf
Скачиваний:
374
Добавлен:
03.05.2015
Размер:
3.07 Mб
Скачать

84

и при нажатии кнопки “Да” выводится диалоговое окно

В отличие от цикла Do While цикл Do Until выполняется до тех пор, пока выражение условия имеет значение False.

Пример

Sub DUN() Dim j As Integer Range("K1") = 0 j = 0

Do Until Range("K1") > 8 Range("K1") = Range("K1") + j j = j + 1

Loop

End SubTextBox1.Text = Sum

В результате выполнения этого примера в ячейке K1 активного листа будет выведено вычисленное значение, равное 10.

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

Инструкция For Each применяется для выполнения одного и того же набора операторов для элемента массива или коллекции. Инструкция For Each имеет следующий формат:

For Each элемент In группа

[Инструкции] [Exit For] [Инструкции]

Next

Формат инструкции Do …Loop содержит следующие элементы:

Элемент инструкции

Описание элемента

Элемент

Обязательный. Переменная, используемая для итерации по

 

элементам коллекции или массива. Может быть только

 

Variant-переменной.

Группа

Обязательный. Имя коллекции объектов или массива.

Инструкции

Необязательный. Один или более операторов, которые вы-

 

полняются для каждого элемента в Группа

Блок For Each… выполняется, если в Группа имеется, по крайней мере, один элемент. Все инструкции цикла выполняются для каждого элемента Группа. После этого управление передаётся инструкции, следующей за ключевым словом Next.

85

Цикл For Each...Next похож на For...Next за исключением того, что он повторно выполняет одну и ту же группу операторов для каждого элемента набора объектов или массива. Это особенно полезно в том случае, когда не известно число элементов в наборе или когда их количество может измениться, пока работает процедура.

В приведённой ниже процедуре ForEach используется динамический массив Мас, размерность которого L определяется как целая часть произведения значения случайной функции Rnd в инструкции ReDim. Определение целой части производится при помощи встроенной функции VBA Int. Если количество элементов массива равно 0, то об этом выдаётся сообщение и происходит выход из процедуры.

По инструкции For i = 1 To L производится присвоение значений элементам массива Мас случайными числами и вывод их на экран.

По инструкции For Each… осуществляется присвоение значений ячейкам A1:AL ячейкам активного рабочего листа A1: AL случайных чисел.

Option Base 1

Option Explicit

––––––––––––––––––––––––––––––––––––––––––––––––––––––

Sub ForEach() Dim Мас() As Single

Dim L As Integer, i As Integer, k As Integer Dim n As Variant

L = Int(Rnd * 10)

If L = 0 Then

MsgBox "Количество элементов массива равно " & L Exit Sub

End If

MsgBox "Количество элементов массива равно " & L

ReDim Мас(L) ' Устанавливается размер динамического массива

For i = 1 To L Мас(i) = Rnd

MsgBox "Мас(" & i & ")=" & Мас(i)

Next i k = 0

For Each n In Мас k = k + 1 Cells(1, k) = n

Next n

End Sub

В процедуре РабочиеЛисты, приведенной ниже, применена конструкция For Each - Next коллекции Sheets активной рабочей книги.

Sub РабочиеЛисты()

Dim ЛИСТ As Worksheet

Dim s As String