Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Создание пользовательских п ÒÉÌÏÖÅÎÉÊ ÓÒÅÄÓÔÁÍ...doc
Скачиваний:
6
Добавлен:
18.11.2019
Размер:
2.02 Mб
Скачать

Цикл For Each…Next

Цикл объектного типа используется для массивов или групп (коллекций) объектов. Циклы объектного типа повторяют последовательность операторов ровно столько раз, сколько элементов содержится в массиве или в группе объектов. В отличие от вычисляемого цикла переменная цикла не является счетчиком цикла, а содержит значение элемента массива или ссылку на объект из группы объектов.

Синтаксис оператора

For Each element In group [statements] [Exit For] [statements]

Next [element]

  • element – переменная, значения которой суть элементы из группы;

  • group –массив данных или группа объектов;

  • statements – последовательность операторов, выполняемая для каждого элемента;

  • Exit For – оператор, осуществляющий немедленный выход из цикла.

Важно

  • Если цикл выполняется для массива, то переменная element должна быть переменной типа Variant.

  • Если цикл выполняется для коллекции объектов, то тип переменной element Object или должен совпадать с типом элементов коллекции объектов.

  • Не рекомендуется внутри цикла изменять количество элементов массива или группы, так как новый элемент может не обработаться командами тела цикла.

  • Цикл For Each для группы объектов более эффективен, чем цикл For Next.

Оператор Set

Для работы с объектами требуется устанавливать значение объектной переменной. Напомним, что объектная переменная хранит адрес, указывающий на объект.

Объявление переменных объектного типа ничем не отличается от объявления переменных других типов.

В отличие от переменных других типов установка значения объектной переменной выполняется при помощи оператора Set.

Синтаксис оператора

Set objectvar = objectexpression|Nothing

  • objectvar – объектная переменная;

  • objectexpression – объектное выражение;

  • Nothing – ключевое слово, указывающее на отсутствие ссылки на объект.

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

Внимание

  • Оператор Set только устанавливает ссылку на объект, не создавая никакой копии.

  • Типы объектного выражения и объектной переменной должны совпадать.

  • Чтобы очистить объектную переменную, используйте значение Nothing в операторе присваивания, которое аннулирует ссылку на объект и освобождает ресурсы. Например: Set rng= Nothing.

Примеры

  1. Просуммировать элементы массива.

    Sub for_each_array()

    Dim arr(1 To 5), i As Variant, s As Long

    For i = 1 To 5 ‘инициализация элементов

    массива

    arr(i) = i

    Next i

    For Each i In arr ‘суммирование элементов

    s = s + i

    Next i

    Debug.Print s

    End Sub

    В вычисляемом цикле значения элементов массива устанавливаются равными номеру элемента массива.

    В цикле объектного типа подсчитывается сумма элементов массива: переменная цикла i принимает значения элементов массива.

  2. Заполнить интервал ячеек последовательными натуральными числами.

Sub fill_obj()

Dim Obj_range As Range, p As Object, i as Integer

i=1

Set Obj_range = Range("A1:B6")

For Each p In Obj_range

p.value = i

i=i+1

Next p

End Sub

Переменная Obj_range объявлена как объект Range и ее значение устанавливается оператором Set как ссылка на интервал ячеек A1:B6.

Переменная p (переменная цикла объектного типа) перебирает все ячейки интервала Obj_range, устанавливая их значения в номер элемента.