Инструкция For-Each-Next с семействами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Инструкция For-Each-Next с семействами



Преимущества For- Each- Next при работе с массивами бесспорны, но они мерки рядом с достоинствами этой структуры в обращении с объектами семейств. Рассмотрим простой пример.

Sub ForEachNextWorksheet()

Dim SheetVar As Worksheet

For Each SheetVar In ActiveWorkbook.Worksheets

MsgBox SheetVar.Name

Next

End Sub

В ForEachNextWorksheet происходит обращение к каждому рабочему листу из семейства Worksheets активной рабочей книги, в результате которого имена листов последовательно выводятся на экран.

Вы вправе изменить значения свойств Name рабочих листов в этом примере.

Sub ForEachNextWorksheet()

Dim SheetVar As Worksheet

For Each SheetVar In ActiveWorkbook.Worksheets

SheetVar.Name = "Work" & SheetVar.Name

MsgBox SheetVar.Name

Next

End Sub

Здесь изменяются имена листов — перед каждым из них добавляется слово Work. Для восстановления прежних имен введите следующий фрагмент кода.

Sub ForEachNextWorksheet()

Dim SheetVar As Worksheet

Dim x As Integer

x = 1

For Each SheetVar In ActiveWorkbook.Worksheets

SheetVar.Name = "Лист" & x

x = x + 1

MsgBox SheetVar.Name

Next

End Sub

Инструкцию For- Each- Next можно применять и для вызова методов объектов семейства. Следующая процедура закрывает все книги, оставляя лишь одну, в которой размещена сама процедура.

Sub ForEachNextWorkbook()

Dim Book As Workbook

For Each Book In Application.Workbooks

If Book.Name <> ThisWorkbook.Name Then

Book.Close

End If

Next

End Sub

В цикле имя каждой рабочей книги сравнивается с именем книги ThisWorkbook. Если имена не совпадают, для книги вызывается метод Close.

Управляющая инструкция While-Wend

Действие ее подобно действию For- Next, но группа инструкций выполняется не заданное число раз, а до соблюдения определенного условия. В программе WhileWend инструкция While- Wend использована для выделения определенного значения из последовательности случайных чисел.

Sub WhileWend()

Dim LotteryEntry As Integer

LotteryEntry = 0

While LotteryEntry <> 7

LotteryEntry = Int(10 * Rnd())

Beep

Wend

MsgBox "Выпал номер " & LotteryEntry & ". Вы выиграли!"

End Sub

Программа WhileWend гарантирует, что в информационном окне всегда отображается заданное число. Цикл While- Wend выполняется, пока значение переменной LotteryEntry не станет равным 7 (в условии использован оператор неравенства <>).

При каждом выполнении цикла этой переменной присваивается случайное значе­ние от 0 до 9, а затем (впрочем, без особой надобности) вызывается функция VBA Веер, подающая звуковой сигнал через внутренний динамик компьютера. Запусти­те эту программу несколько раз, и Вы услышите разное количество сигналов, в за­висимости от того, на каком шаге генератор случайных чисел вернет число 7.

Замечание:

Чтобы генератор случайных чисел при каждом запуске приложения выдавал новую последовательность случайных чисел, вставьте в начало программы команду Randomize. Если Вы этого не сделаете, при каждом открытии файла рабочей книги будет генерироваться одна и та же последовательность.

Рассмотрим структуру цикла While- Wend подробнее.

While Ключевое слово, отмечающее начало инструкции While-Wend
LotteryEntry <> 7 Условие, определяющее, будет или нет выполнен цикл. Если оно соблюдено, цикл выполняется, если нет — управление передается инструкции, стоящей за ключевым словом Wend
LotteryEntry = Int(10 * Rnd()) Первая инструкция цикла
Beep Вторая инструкция цикла
Wend Ключевое слово, отмечающее конец инструкции While-Wend.

Комментарии в программе

Комментарий — это любые символы справа от апострофа ('). Их может быть много — целая строка кода, или несколько — в конце строки с командой. Если Вы предпочли второй вариант, выравнивайте их с помощью символов табуляции. Помните, что комментарии должны делать код более понятным, а не запутывать его.



Поделиться:


Последнее изменение этой страницы: 2021-12-15; просмотров: 62; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.189.180.76 (0.006 с.)