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



ЗНАЕТЕ ЛИ ВЫ?

Операторы, команды и выражения в VBA

Поиск

Операторы. Для объединения функций, переменных и значений в программном тексте Visual Basic служат специальные языковые элементы — операторы. Операторы Visual Basic образуют четыре общие категории: арифметические, логические, конкатенации и сравнения.

Арифметические операторы. В инструкциях Visual Basic доступны следующие арифметические операции: ^ (степень числа), * (умножение), / (деление), \ ( целочисленное деление ), Mod (деление по модулю), + (сумма), - (вычитание и унарный минус).

Логические операторы. Логические операции используются для комбинирования или модификации выражений типа True/False. Логические операции языка Visual Basic следующие: And (логическая конъюнкция), Eqv (логическая эквивалентность), Imp (логическая импликация), Not (логическое отрицание), Or (логическая дизъюнкция), Xor (логическое исключение).

Операторы конкатенации. Используются для строковой конкатенации двух выражений и имеют две разновидности & и +.

Операторы сравнения. В VBA используются следующие операторы сравнения: = (равно), <(меньше), <= (меньше или равно), >(больше), >= (больше или равно),<> (не равно), о ператор Is (используется для сравнения двух переменных, содержащих объектные ссылки, о ператор Like (используется для сравнения двух строк).

При сравнении можно использовать символы подстановки, символьные списки или сим­вольные интервалы в любой комбинации. В следующей таблице приведены символы под­становки, допустимые в образце:

Символ в образце Чему соответствует
? Любой единичный символ.
* Ноль или больше символов.
# Любая единичная цифра (0 — 9).
[список_символов] Любой отдельный символ из список_символов.
[! список_символов ] Любой отдельный символ не из список_символов.

Группа из одного или больше символов {список_символов), заключенных в квадратные скобки ([ ]), может использоваться для проверки совпадения любого единственного символа в строке и может содержать почти любой символьный код, включая цифры.

Чтобы проверить на совпадение специальные символы левая квадратная скобка ([), знак вопроса (?), знак номера (#) и звездочка (*), их нужно заключать в квадратные скобки. Правая квадрат­ная скобка (]) не может использоваться для проверки внутри группы, но может использоваться вне группы как отдельный символ.

При использовании дефиса (-) для определения верхнего и нижнего пределов интервала в список_символов можно специфицировать интервал символов. Например, [A-Z] возвраща­ет совпадение, если соответствующая символьная позиция в строке содержит любой из символов верхнего регистра в интервале A-Z. Внутри скобок можно включить несколько интервалов без разделителей.

Значение специфицированного интервала зависит от параметра оператора Option Compare и места локализации системы. Например, при использовании Option Compare Binary интер­вал [А-Е] соответствует А, В, С, D и Е. С Option Compare Text интервал [А-Е] соответствует А, а, В, b, С, с, D, d, Е, е.

Кроме сказанного, имеются следующие правила совпадения по образцу:

• восклицательный знак (!) в начале список_символов означает, что совпадение вернет True, если в строке имеются любые символы, за исключением символов в список_символов. Если восклицательный знак используется снаружи скобок, он сравнивается отдельно;

• если нужно сравнить дефис (-), он может устанавливаться либо в начале (после воскли­цательного знака, если таковой используется), либо в конце список_символов. В любой другой позиции дефис используется, чтобы идентифицировать интервал символов;

• когда специфицируется интервал символов, они должны вводиться в порядке возрастания (от самого низкого до самого высокого кода). [A-Z] — допустимый образец, но [Z-A] — нет;

• символьная последовательность [ ] рассматривается как строка нулевой длины ("").

Примеры:

Dim MyCheck

MyCheck = "aBBBa" Like "a*a" ' Возвращает True

MyCheck = "F" Like "[A-Z]" ' Возвращает True

MyCheck = "F" Like "[!A-Z]" ' Возвращает False

MyCheck = "a2a" Like "a#a" ' Возвращает True

MyCheck = "aM5b" Like "a [L-P]#[!c-e]" ' Возвращает True

MyCheck - "BAT123khg" Like "B?T*" ' Возвращает True

MyCheck = "CAT123khg" Like "B?Т*" ' Возвращает False

Старшинство операторов. Когда в выражении выполняется несколько операторов, каждая часть выражения оценива­ется и разрешается в предопределенном порядке, именуемом старшинством операторов.

Если выражение содержит операторы из более чем одной категории, вначале оцениваются арифметические операторы, затем операторы сравнения и последними оцениваются логические операторы. Все операторы сравнения имеют равное старшинство; то есть они оцениваются слева направо в том порядке, в котором они появляются. Арифметические и логические операторы оцениваются в следующем порядке старшинства:

Арифметические Сравнения Логические
Возведение в степень (^) Равенство (=) Not
Отрицание (-) Неравенство(< >) And
Умножение и деление (*,/) Меньше (<) Or
Целочисленное деление (\) Больше (>) Xor
Деление по модулю (Mod) Меньше или равно (<=) Eqv
Сложение и вычитание (+,-) Больше или равно (>=) Imp
Строковая конкатенация (&) Like Is

Если в одном выражении имеется умножение и деление, каждый из операторов равнопра­вен и оценивается по порядку слева направо. Если в одном выражении имеется сложение и вычитание, каждый из операторов также равноправен и оценивается в порядке появления слева направо. Для переопределения порядка выполнения некоторых элементов выраже­ния, которые требуется оценить прежде других, можно использовать круглые скобки. Опе­раторы внутри круглых скобок всегда выполняются до операторов вне их. Однако внутри круглых скобок старшинство операторов выдерживается.

Оператор строковой конкатенации (&) — не арифметический оператор, но в старшинстве он следует за всеми арифметическими операторами и предшествует всем операторам срав­нения.

Оператор Like равен в старшинстве всем операторам сравнения, но фактически этот оператор совпадения с образцом стоит особняком от операторов сравнения.

Оператор Is — оператор сравнения объектной ссылки. Он не сравнивает объекты или их значения; он лишь выясняет, относятся ли две объектные ссылки к одному объекту.

Команды. Команда — ключевое слово Visual Basic, которое выполняет некоторое действие, но не возвращает значение. Чтобы использовать операцию, в строке программного текста (инст­рукции) вводится ее имя. Это упоминание называется вызовом команды. Когда требуется, команде передаются параметры, часто в круглых скобках. Некоторые команды требуют круглых скобок; другие, наоборот, их не допускают.

Категории команд. Команды Visual Basic подразделяются на общие категории, основные из которых перечис­лены в следующей таблице:

Категория Описание
Управление выполнением Управляет потоком выполнения программного кода. Позволяет определять циклы, переходы к специфицированной строке кода и управлять ошибками
Определение и управ­ление переменными и константами Объявление переменных и констант.  
Комментарии Позволяют определять комментарии кода
Определение процедур   Объявление процедур Visual Basic, внешних процедур DLL и завершение объявлений процедур, типов, свойств
Файловый ввод-вывод Позволяют читать и записывать информа­цию в файлы операционной системы.
Управление директори­ями/файлами Позволяют создавать, удалять и осуществ­лять навигацию между каталогами, блокиро­вать или переименовывать файлы
Разные  

Выражения. Выражение Visual Basic может быть сформировано любыми из следующих элементов, отдельными или объединенными соответствующими операторами: константы; функции и процедуры; объектные свойства; переменные.

Оценка выражения. Порядок, в котором Visual Basic оценивает операции выражения, рассмотрены выше, в разделе "Старшинство операторов".

Выражение оценивается для получения значения, которое представляет это выражение. Оценка выражения включает вычисления в функциях и выполнение специфицированных инструкций. Когда выполнено вычисление в функции, функция заменяется ее возвращае­мым значением. Так как выражение представляет значение, каждое выражение имеет тип данного. Отдельные элементы, составляющие выражение, также имеют типы данных.

Когда в выражении объединяются элементы различных типов, то для упрощения выраже­ния и результата Visual Basic выполняет неявные преобразования типов данных.

Процедуры VBA

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

• процедуры позволяют разбивать программы на дискретные логические единицы, каждую из которых отладить легче, чем целую программу без процедур;

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

В Visual Basic для приложений используется несколько типов процедур:

• процедуры Sub выполняют некоторое действие, не возвращая значение;

• процедуры Function выполняют некоторое действие и по результатам его возвращают значение;

• процедуры Property могут возвращать и присваивать значения и устанавливать ссылки на объекты.

Процедуры Sub. Процедура Sub — блок кода, который выполняется в ответ на событие или по вызову. Если код в модуле разбит на процедуры Sub, его намного проще сопровождать или отлаживать.

Синтаксис определения процедуры Sub:

[ Private | Public] [Static] Sub имя_процедуры (параметры)

Инструкции

End Sub

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

Параметры процедуры подобны объявляемым переменным, которые передаются из вызы­вающей процедуры.

В VBA следует различать два типа процедур Sub — пользовательские процедуры и процедуры обработки событий.

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

Зачем нужно создавать пользовательские процедуры? Одна из причин в том, что несколько различных процедур обработки событий могут выполнять какое-либо аналогичное дейст­вие. Хорошим стилем программирования будет поместить такие общие инструкции в от­дельной процедуре и вызывать их из процедур событий. Это устраняет потребность в дублировании кода и упрощает сопровождение приложения.

Процедуры обработки событий. Когда объект Visual Basic распознает, что произошло событие, он автоматически вызывает встроенную процедуру, используя имя, соответствующее событию (эти события представ­лены в списке Процедура окна модуля). Так как имя устанавливает ассоциа­цию между объектом и кодом, можно сказать, что процедуры обработки событий присоединены к формам и элементам управления:

• имя процедуры обработки события для элемента управления строится из фактического имени элемента управления (специфицированного в свойстве Имя), символа подчеркивания (_) и имени события. Например, при щелчке командной кнопки, именован­ной Кнопка1, будет вызвана процедура события Кнопка1_Сlick();

• в имени процедуры обработки события для формы объединяется слово " Form" (для отчета — "Report"), символ подчеркивания и имя события. При щелчке на поле формы будет вызвана процедура Form_Click() (как и элементы управления, формы имеют уни­кальные имена, но в именах процедур обработки событий они не используются).

Для всех процедур обработки событий используется один общий синтаксис. Синтаксис для события элемента управления:

Private Sub имя-элемента-управления_имя-события (параметры)

Инструкции

End Sub

Синтаксис для события формы:

Private Sub Form _имя-события (параметры)

Инструкции

End Sub

Хотя процедуры обработки событий можно написать с самого начала, проще использовать заготовки кода, обеспечиваемые Access; они автоматически включают правильные имена процедур. Шаблон процедуры события можно получить в окне редактора кода, выбрав объект из списка Объект, а затем процедуру из списка Процедура.

Свойство Имя элемента управления рекомендуется назначить прежде, чем приступать к написанию для него процедур событий. Если имя элемента управления изменяется после создания для него процедур, нужно будет также в имена всех написанных процедур ввести соответствующее новое имя элемента управления. Иначе Access не сможет ассоциировать элемент управления с процедурой. Когда имя процедуры не соответствует имени элемента управления, Access рассматривает ее как главную процедуру.

Процедуры Function. Visual Basic для приложений включает большое количество встроенных функций, выполня­ющих стандартные операции. Это, например, такие функции, как Sqr, Cos или Chr. Кроме того, инструкцией Function можно объявлять пользовательские процедуры Function.

Как и процедура Sub, Function является отдельной процедурой, которая может принимать параметры, выполнять ряд инструкций и изменять значения параметров. В отличие от процедуры Sub, процедура Function может возвращать в вызывающую процедуру некото­рое значение. Между процедурами Sub и Function имеется три различия:

• Обычно функция вызывается включением имени функции и ее параметров в правую часть инструкции или выражения:

возвращаемое значение = функция().

• подобно переменным, процедуры Function имеют типы данных. Тип данного функции определяет тип возвращаемого значения. (В отсутствие предложения As, тип функции — Variant);

• значение функции возвращается присвоением этого значения имени процедуры непос­редственно в теле функции. Когда процедура Function возвращает значение, это значе­ние может затем стать частью большего выражения.

Процедура Function вызывается так же, как и любая встроенная функция Visual Basic.

Создание новых процедур. Чтобы создать новую главную процедуру необходимо ввести заголовок процедуры в окне редактирования кода и нажать <Enter>. Заголовок процедуры предваряется ключевым словом Sub или Function. Например, можно ввести следующее:

Sub UpdateForm ()

или

Function SchetSumma () ' Можно даже без скобок

Access отвечает, завершая шаблон для новой процедуры (вводит скобки параметров и инструкцию End Sub или End Function).

Выбор существующих процедур. Для просмотра существующей пользовательской процедуры в текущем модуле, нужно в окне редактиро­вания кода выбрать Общая область из списка Объект и затем выбрать процедуру в окне Процедура.

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

Для просмотра процедуры в другом модуле необходимо:

1. Из меню Вид выбрать Просмотр объектов или нажать кнопку Просмотр объектов на панели инструментов.

2. В списке Проект/Библиотека окна Просмотр объектов выбрать проект.

3. Выбрать модуль из списка Классы и найти процедуру в списке Компоненты.

4. Дважды щелкнуть процедуру или выбрать Описания в контекстном меню окна Просмотр объектов или нажать кнопку Описания. Откроется окно нужного модуля.

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

В следующих разделах показано, как вызывать процедуры Sub и Function.

Вызов процедур Sub. Процедура Sub отличается от процедуры Function тем, что процедура Sub не может вызы­ваться вводом ее имени внутри выражения. Вызов Sub — автономная инструкция. Кроме того, в имени Sub не возвращается значение, как это имеет место для функции. Однако, подобно Function, Sub может изменять значения любой переданной ей переменной.

Вызвать процедуру Sub можно двумя способами:

' Обе следующие инструкции вызывают процедуру Sub Proc1

Call Proc1 (Argument1, Argument2)

Proc1 Argument1, Argument2

Следует отметить, что, когда используется синтаксис Call, параметры должны быть заклю­чены в круглые скобки.

Если ключевое слово Call опущено, нужно также опустить круглые скобки вокруг пара­метров.

Вызов процедур Function. Обычно процедура Function, написанная программистом, вызывается аналогично встроен­ной функции Visual Basic, то есть с использованием ее имени в выражении:

' Все следующие инструкции вызовут функцию ToDec

Print 10 * ToDec

X = ToDec

If ToDec = 10 Then Debug.Print "Значение вне допустимого интервала"

X = Function1(10 * ToDec)

Можно также вызвать функцию аналогично процедуре Sub. Например, обе следующие инструкции вызывают функцию Year:

Call Year (Now)

Year Now

При вызове функции, таким образом, Visual Basic отбрасывает возвращаемое значение.

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

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

Call Report_Счет.Subl (параметры)

Процедуры в модулях классов. Как и при вызове процедуры формы, вызов процедуры в модуле класса должен квалифици­роваться переменной, которая указывает на экземпляр класса. Например, DemoClass — экземпляр класса Class1:

Dim DemoClass as New Class1

DemoClass.Subl

Однако, в отличие от формы или отчета, имя класса не может непосредственно использо­ваться как спецификатор при обращении к экземпляру класса. Вначале должен быть объяв­лен экземпляр класса как объектная переменная (в нашем случае — DemoClass), и далее этот экземпляр должен адресоваться именем переменной.

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

Если два или больше модуля содержат процедуры с одинаковыми именами, придется квалифицировать их именем модуля. Вызов такой процедуры из модуля выполняет проце­дуру данного модуля. Например, если процедура с именем CommonName имеется в моду­лях Модуль1 и Модуль2, то вызов CommonName из Модуль2 запустит процедуру CommonName в Модуль2, но никак не процедуру CommonName в Модуль1.

Если из Модуль1 требуется вызвать процедуру CommonName, определенную в Модуль2, нужно использовать такую инструкцию:

Moдyль2.CommonName (параметры)

Управляющие структуры в VBA

Одним из удобств написания пользовательских процедур на языке Visual Basic для прило­жений является то, что в нем можно создавать процедуры, которые способны либо прини­мать решения в зависимости от некоторых условий, либо многократно циклически выполнять последовательность инструкций. Такие управляющие структуры позволяют уп­равлять потоком выполнения программы.

Структуры принятия решений. Интеллектуальная процедура Visual Basic вначале тестирует программную среду и затем, основываясь на результатах тестирования, решает, что делать дальше. Предположим, что создается процедура Function, которая использует один из своих параметров в качестве делителя в формуле. Перед тем как использовать этот параметр в формуле, его следует протестировать, чтобы убедиться, что он не равен нулю (во избежание ошибки деления на 0). В случае, если он оказывается равным нулю, можно выдать сообщение, предупреждаю­щее пользователя об ошибочном значении. Структуры принятия решений, которые поддер­живает Visual Basic, включают:

If...Then, If...Then...Else, Select Case

If...Then. Структура If...Then используется для условного выполнения одной или больше инструкций. Можно использовать либо однострочный, либо блочный синтаксис инструкции:

If условие Then инструкция

If условие Then

Инструкции

End If

Условие — обычно сравнение, но это может быть любое выражение, которое оценивается как числовое значение. Visual Basic интерпретирует это значение как True или False; нулевое числовое значение является False, а любое числовое значение, отличное от нуля, рассмат­ривается как True. Если условие — True, Visual Basic выполняет все инструкции, следующие за ключевым словом Then. Для условного выполнения единственной инструкции можно использовать оба синтаксиса структуры. Так следующие два примера эквивалентны:

If anyDate < Now Then anyDate = Now

If anyDate < Now Then

anyDate = Now

End If

Обратите внимание, что в однострочном синтаксисе If...Then не используется инструкция End If. Если требуется выполнить более одной строки кода, когда условие — True, необхо­димо применять блочный синтаксис If...Then...End If.

If anyDate < Now Then

anyDate = Now

Timer1.Enabled = False ' Деактивировать элемент ‘управления таймер

End If

Можно несколько увеличить эффективность использования инструкции If... Then, используя тот факт, что при оценке условия нулевое значение эквивалентно значению False, в то время как любое другое значение эквивалентно логическому значению True. Это значит, что не обязательно явно тестировать переменную или выражение, чтобы увидеть, равно ли оно нулю. Вместо этого можно использовать такую форму записи:

If Total Then

Summa = Summa + Total

End If

С другой стороны, многие программисты ощущают, что непосредственное включение тес­тирования ненулевого значения (Total <> 0) делает процедуру более интуитивной и удобной для восприятия. Поскольку в данном случае преимущество неявного тестирования весьма невелико, возможно, стоит поступать обычным способом

If...Then...Else. Использование инструкции If... Then для принятия решений представляет собой мощное орудие в арсенале языковых средств Visual Basic. Однако в нем содержится и существен­ный недостаток: в случае ложного результата (False) If... Then лишь пропускает одну или больше инструкций, но самостоятельно не исполняет ни одной команды. Во многих случаях это вполне оправданно, однако иногда может понадобиться выполнить одну группу команд, если условие возвращает значение True, и другую, если значение будет False. Справиться с этой проблемой позволяет инструкция If... Then... Else. В этом блоке определяется несколько групп инструкций, из которых должна быть выполнена одна:

If условие1 Then

[блок_инструкций 1]

[ElseIf условие2 Then

[блок_инструки,ий 2]]...

[Else

[блок_инструкций п]]

End If

Visual Basic сначала тестирует условие1. Если оно — False, Visual Basic продолжает тестировать условие2, и т. д., пока не получает результат True. Найдя условие True, Visual Basic выполняет соответствующий блок_инструкций и затем выполняет код, следующий за End If. В качестве опции можно также включать блок инструкций Else, который Visual Basic выполняет, если среди условий не найдет True.

Блок If...Then... ElseIf—частный случай lf...Then...Else; он может содержать любое количест­во предложений Elself или вообще их не содержать. Предложение Else можно включать независимо от того, имеются ли предложения Elself.

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

Select Case. В качестве альтернативы блоку lf...Then...Else, Visual Basic предоставляет структуру Select Case для селективного выполнения одной группы инструкций из числа нескольких групп инструкций. Инструкция Select Case обеспечивает возможности, подобные lf...Then...Else, но в случаях не­скольких выборов делает код более читабельным. Структура Select Case работает с единст­венным оцениваемым выражением, которое проверяется однажды, наверху структуры. Затем Visual Basic сравнивает результат этого выражения со значениями для каждого Case структуры. Если встречается совпадение, выполняется группа инструкций, ассоциированных с этим Case:

Select Case оцениваемое_выражение

[Case список_выражений1 ]

[ блок_инструкций 1 ]

[Case список_выражений2 ]

[ блок_инструкций 2 ]

...

[ Case Else]

[ блок_инструкций n]]

End Select

Каждый список_выражений — список из одного или больше значений. Если в одном списке имеется больше одного значения, значения отделяются запятыми. Каждый блок_инструкций содержит ноль или больше инструкций. Если оцениваемому_выражению удовлетворя­ет больше чем один Case, выполняется только блок инструкций, ассоциированный с первым подходящим Case. Если в списках_выражений нет значений, соответствующих оцениваемому_выражению, Visual Basic выполняет инструкции в предложении Case Else (которое является необязательным).

Обратите внимание, что структура Select Case оценивает выражение однажды наверху структуры. С другой стороны, структура lf...Then...Else может оценивать для каждой инструк­ции Elself разные выражения.

Применять структуру Select Case вместо lf...Then...Else можно, только если инструкция If и каждая инструкция Elself оценивают одно и то же выражение.

Структуры-циклы. Если в процедуре необходимо многократно выполнить некоторые фрагменты кода, можно использовать структуры-циклы, которые сообщают Visual Basic, сколько раз следует выпол­нять ту или иную часть кода. Visual Basic поддерживает следующие циклы: Do…Loop, For…Next, For Each…Loop.

Цикл Do…Loop. Инструкция предназначена для выполнения блока инструкций неопределенное число раз. Имеется несколько разновидностей инст­рукции Do...Loop, в каждом из них для определения, продолжить ли выполнение, оценива­ется некоторое числовое условие. Как и в случае с циклом If...Then, условие должно быть значением или выражением, которое оценивается как False (ноль) или True (не ноль).

В следующем варианте Do...Loop инструкции выполняются до тех пор, пока условие — True:

Do While условие

инструкции

Loop

Когда Visual Basic выполняет этот цикл Do, он сначала тестирует условие. Если условие — False (ноль), он пропускает все последующие инструкции и выходит из цикла. Если условие — True, Visual Basic выполняет инструкции и затем возвращается к инструкции Do While и тестирует условие снова.

Следовательно, цикл может выполняться любое число раз, пока условие будет отлично от нуля или True. Инструкции никогда не выполняются, если условие — первоначально False.

Другой вариант цикла Do...Loop сначала выполняет инструкции, а затем тестирует условие после каждого выполнения. Эта разновидность гарантирует, по крайней мере, одно выполне­ние инструкций:

Do

Инструкции

Loop While условие

Две другие разновидности аналогичны предыдущим двум, за исключением того, что цикл выполняется, пока условие — False вместо True (то есть пока это условие не наступит).

Цикл ноль или больше раз:

Do Until условие

Инструкции

Loop

Цикл, по крайней мере, один раз:

Do

Инструкции

Loop Until условие

Цикл For—Next. Этот цикл является наиболее распространенным. Этот цикл используется в том случае, если (в отличие от инструкций Do) точно известно, сколько раз нужно повторить ту или иную группу инструкций. Особенность цикла For — переменная, именуемая счетчиком, значение которой увеличивается или уменьшается в течение каждого повторения цикла. Цикл For... Next имеет такую структуру:

For счетчик = начало То конец [Step приращение ]

[ инструкции ]

Next [счетчик]

Параметры счетчик, начало, конец и приращение — числовые.

Параметр приращение может быть как положительным, так и отрицательным. Если приращение положительно, начало должно быть меньше или равно конец, иначе инструкции цикла не будут выполняться. Если приращение отрицательно, то для выполнения инструкций начало должно быть больше либо равно конец. Если Step не специфицировано, то приращение, по умолча­нию, устанавливается равным 1. Если значение начало счетчика равно значению конец, цикл будет выполнен один раз.

При выполнении цикла For Visual Basic:

1. Устанавливает счетчик равным значению начало.

2. Тестирует счетчик. Если значение счетчика больше значения конец. Visual Basic выхо­дит из цикла (то есть выполняет инструкцию, следующую непосредственно за инструк­цией Next). Если счетчик не вышел за пределы значения конец, цикл повторяется. В случае отрицательного значения приращения Visual Basic проверяет, не является ли очередное значение счетчика меньше значения конец.

3. Выполняет инструкции.

4.Увеличивает счетчик на 1 или на значение приращение, если оно специфицировано.

5. Повторяет шаги со 2-го по 4-й, пока не выполнит цикл требуемое количество раз.

Цикл For Each—Next. Очень полезным вариантом инструкции For...Next является инструкция For Each...Next, которая производит действия с наборами элементов.

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

Синтаксис инструкции For Each...Next следующий:

For Each элемент In набор

Инструкции

Next элемент

При использовании цикла For Each...Next необходимо помнить следующее:

• для семейств элемент может быть только переменной Variant, переменной общего типа Object или объектного типа (класса), представленного в окне Просмотр объектов;

• для массивов элемент может быть только переменной Variant;

• For Each...Next нельзя использовать с массивом пользовательских типов, так как Variant не может содержать пользовательский тип.



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 2647; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

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