Студопедия  
Главная страница | Контакты | Случайная страница

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Ветвления

Читайте также:
  1. Ветвления
  2. Закономерности хода и ветвления нервов
  3. Команда ветвления IF
  4. Операторы ветвления
  5. Операторы ветвления
  6. Проверочный расчет ответвления
  7. Разветвляющиеся алгоритмы. Команда ветвления
  8. Ранний шиизм и его ответвления
  9. Составить программу для выполнения указанного ниже задания, используя оператор множественного ветвления.

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

Начнем с управляющих конструкций ветвления. Для организации ветвлений в VBA имеются операторы краткого и полного ветвления If и оператор выбора Select Case.

Краткая форма оператора ветвления If может иметь как однострочную, так и блочную форму. В одну строку краткая форма If может быть записана так:

If условие Then оператор

В блочной форме краткое ветвление выглядит следующим образом:

If условие Then

оператор1

оператор2

...

End If

В качестве условия можно использовать логическое выражение, возвращающее значение True (ИСТИНА) или False (ЛОЖЬ), или любое арифметическое выражение. Если используется арифметическое выражение, то нулевое значение этого выражения эквивалентно логическому значению False, а любое ненулевое выражение эквивалентно True. В том случае, когда условие возвращает значение False, операторы, составляющие тело краткого оператора ветвления, не будут выполняться.

В тех случаях, когда значению условия False должно соответствовать выполнение каких-либо других действий, а не просто пропуск оператора или группы операторов, используется полная форма оператора ветвления, всегда имеющая блочную форму записи:

If условие Then

группаОператоров_1

Else

группаОператоров_2

End If

Если условие истинно, выполняется первая группа операторов, а в противном случае — вторая группа.

Совет

Для того чтобы текст вашей процедуры выглядел понятным и удобным для восприятия, рекомендуется делать отступы для групп операторов так, как это указано при описании их синтаксиса. В VBA предусмотрено удобное средство изменения отступов — нажатие на клавишу <Tab> увеличивает отступ вправо, нажатие комбинации клавиш <Shift>+<Tab> уменьшает этот отступ.

Перейдем теперь к рассмотрению оператора выбора. Часто приходится делать выбор одного из целой группы альтернативных действий. Можно использовать для этого вложенные операторы ветвления If... Then... Else, однако если выбор одной из возможностей должен быть основан на различных значениях одного и того же выражения, гораздо удобнее использовать специальный оператор выбора Select Case, имеющий следующий синтаксис:

Select Case проверяемоеВыражение

Case списокЗначений_1

группаОператоров_1

Case списокЗначений_2

группаОператоров_2

Case списокЗначений_3

группаОператоров_3

...

Case Else

группаОператоров_Else

End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. Это выражение может возвращать значение любого типа, например, логическое, числовое или строковое.

Список выражений представляет собой одно или несколько выражений, разделенных запятой. При выполнении оператора проверяется, соответствует ли хотя бы один из элементов этого списка проверяемому выражению. Эти элементы списка выражений могут иметь одну из следующих форм:

выражение

в этом случае проверяется, совпадает ли значение проверяемого выражения с этим выражением;

выражение1 To выражение2

в этом случае проверяется, находится ли значение проверяемого выражения в указанном диапазоне значений;

Is логическийОператор выражение

в этом случае проверяемое выражение сравнивается с указанным значением с помощью заданного логического оператора; например, условие Is >= 10 считается выполненным, если проверяемое значение не меньше 10.

Если хотя бы один из элементов списка соответствует проверяемому выражению, то выполняется соответствующая группа операторов, и на этом выполнение оператора Select Case заканчивается, а остальные списки выражений не проверяются, т. е. отыскивается только первый подходящий элемент списков выражений. Если же ни один из элементов всех этих списков не соответствует значению проверяемого выражения, выполняются операторы группы Else, если таковая присутствует.

Циклы

Перейдем теперь к рассмотрению циклических конструкций. Имеется богатый выбор средств организации циклов, которые можно разделить на две основные группы — циклы Do... Loop и циклы For... Next.

Начнем с рассмотрения первой группы. Циклы типа Do... Loop используются в тех случаях, когда заранее неизвестно, сколько раз должно быть повторено выполнение расположенной в теле цикла группы операторов. Такой цикл продолжает свою работу до тех пор, пока не будет выполнено определенное условие. Существуют четыре типа операторов цикла Do... Loop, которые определяются типом проверяемого условия и местом его расположения. Вот синтаксис этих четырех конструкций:

Таблица 6.3-2. Синтаксис операторов цикла

Конструкция Описание
Do While условие ГруппаОператоров Loop Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу, пока это условие остается истинным (т. е. имеет значение True), иными словами, это условие продолжения работы цикла.
Do ГруппаОператоров Loop While условие Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл продолжает свою работу, пока это условие остается истинным (т. е. имеет значение True), иными словами, это условие продолжения работы цикла.
Do Until условие ГруппаОператоров Loop Условие проверяется до того, как выполняется группа операторов, образующих тело цикла. Цикл продолжает свою работу до тех пор, пока это условие не станет истинным (т. е. не примет значение True), иными словами, это условие прекращения работы цикла.
Do ГруппаОператоров Loop Until условие Условие проверяется после того, как операторы, составляющие тело цикла, будут выполнены хотя бы один раз. Цикл продолжает свою работу до тех пор, пока это условие не станет истинным (т. е. не примет значение True), иными словами, это условие прекращения работы цикла.

Имеется также две разновидности оператора цикла For...Next. Наиболее часто используется следующая конструкция:

For счетчик = начальноеЗначение To конечноеЗначение
[Step приращение ]

группаОператоров

Next [ счетчик ]

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

· "приращение" — может быть как положительным, так и отрицательным числом. Если использовать отрицательное приращение, то конечное значение должно быть меньше либо равно начальному значению для того, чтобы тело цикла выполнилось хотя бы один раз.

· После завершения работы цикла For...Next переменная, которая использовалась в качестве счетчика, получает значение, обязательно превосходящее конечное значение в том случае, если приращение положительно, и строго меньшее конечного значения, если приращение отрицательно.

· Если начальное и конечное значения совпадают, тело цикла выполняется лишь один раз.

· Еще раз рекомендуем использовать отступы при записи циклов, как и при записи операторов ветвления.

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

For Each элемент In совокупность

группаОператоров

Next [ элемент ]

где:

элемент это переменная, используемая для ссылки на элементы семейства объектов;

совокупность это имя массива или семейства.

Приведем пример использования подобного цикла с вложенным в тело цикла оператором ветвления If. Этот цикл предназначается для обработки всех ячеек выделенного диапазона на рабочем листе Excel, заключающегося в закрашивании незаполненных ячеек в выделенном диапазоне с помощью следующей процедуры:

Sub SelectionPaintEmpty()

Dim ячейка As Object

For Each ячейка In Selection

If ячейка.Value = "" Then

With ячейка.Interior

.ColorIndex = 6

.Pattern = xlSolid

End With

End If

Next ячейка

End Sub

Итак, в операторе Dim мы объявили переменную "ячейка" как объект. Для каждой ячейки из текущего выделения мы хотим проделать следующие действия: проверить значение этой ячейки, и если ячейка пуста, то закрасить ее желтым цветом (цвет номер шесть в стандартной палитре цветов рабочей книги).

Приведенный пример демонстрирует также использование вложенных операторов — в оператор цикла For Each...Next вложен оператор ветвления If...End If, в который, в свою очередь, вложен еще один заслуживающий особого внимания оператор — With...End With, пришедший в Basic из языка программирования Pascal. Этот оператор позволяет указать конкретный объект, над которым будут выполняться действия в теле этого оператора. Поскольку в VBA объекты обычно имеют множество различных свойств, часто приходится изменять значения сразу нескольких свойств одного и того же объекта, как в данном случае; при этом полная ссылка на объект может быть достаточно длинной, а повторять ее приходилось бы помногу раз.

Приведем еще один пример использования подобного оператора для обработки всех элементов многомерного массива. Пусть у нас имеется трехмерный числовой массив из 1000 элементов (размерами 10*10*10), который мы хотим заполнить случайными вещественными числами в диапазоне от 0 до 1. Если бы мы использовали обычные циклы For... Next со счетчиками, используя счетчики в качестве индексов элементов массива, то для обработки и заполнения такого массива потребовалось бы написать три вложенных цикла For... Next. На самом деле для выполнения задачи достаточно всего одного цикла For Each... Next:

Dim tArray(10, 10, 10) As Single

Dim elem As Variant

Randomize

For Each elem In tArray

elem = Rnd()

Next




Дата добавления: 2014-12-23; просмотров: 45 | Поможем написать вашу работу | Нарушение авторских прав




lektsii.net - Лекции.Нет - 2014-2024 год. (0.013 сек.) Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав