Вход


Главная страница >> Учебный процесс >> Конспекты >> MS Office. Руководство программиста по Visual Basic для MS Office 97 >> Основы программирования >> Управляющие конструкции >> Операторы циклов >> For Each ...Next

Переход на главную страницу

Сервер поддерживается
кафедрой информатики и вычислительной техники ГрГУ
тел. +375-(0)152-445-101
E-mail :
kadan@grsu.grodno.by


[Назад]    [Содержание ]    [Вперед]

  


For Each ...Next


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

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

Встретив оператор For Each...Next, Visual Basic:

1. Считает элемент именем первого элемента в группе (если группа не пуста).

2. Выполняет операторы.

3. Проверяет, не последний ли это элемент в группе, и, если да, завершает цикл.

4. Подставляет вместо элемента имя следующего элемента в группе.

5. Повторяет операции, описанные в пп. 2-4.

В следующем примере для Microsoft Excel мы проверяем каждую ячейку текущего региона для ячейки А1 в таблице с именем ?Sheet3? и закрашиваем содержимое ячейки красным цветом, если ее значение меньше -1.

For Each с In Worksheets("Sheet3").Range("A1").CurrentRegion.Cells
    
 If c.Value < -1 Then c.Font.ColorIndex = 3
Next c

А в примере для Word просматриваем все исправления в выделенном тексте и поочередно принимаем их:

For Each myRev In Selection.Range.Revisions
     myRev.Accept
Next myRev

Указывать имя переменной после Next (в примере для Microsoft Excel и myRev в примере для Word) не обязательно, но это облегчает восприятие текста программы, особенно при наличии нескольких вложенных циклов For Each.


Внимание:
Если Вы хотите удалить все объекты из набора, используйте цикл For...Next, а не For Each...Next. Скажем, чтобы удалить все слайды из текущей презентации PowerPoint:

Set alISlides = ActivePresentation.Slides
For s = alISlides.Count To 1 Step -1
     alISlides.ltem(s).Delete
Next


Но код, приведенный ниже, работать не будет ? он удалит каждый второй слайд в презентации:

For Each s In ActivePresentation.Slides
     s.Delete
Next

Применяя оператор For Each...Next, помните о следующих ограничениях:

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



[Назад]    [Содержание ]    [Вперед]

  



Текст пособия подготовлен на основе материалов книги
Microsoft Corporation. Руководство программиста по Visual Basic для Microsoft Office 97 / Пер. с англ. - М.: Издательский отдел "Русская Редакция" ТОО "Channel Trading Ltd.", 1997. - 544 с.: илл.
c Оригинальное издание на английском языке,
Microsoft Corporation, 1997
c Русский перевод,
Microsoft Corporation, 1997

  
За содержание страницы отвечает Гончарова М.Н.
©
Кафедра СПиКБ, 2002-2017