Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


СОВМЕСТИМОСТЬ ТИПОВ ДАННЫХ VBA



ТИПЫ ДАННЫХ VBA

Тип данных Описание и диапазон значения
Byte Хранение положительных чисел от 0 до 255
Boolean Хранение логических значений: True, False
Currency Хранение чисел для точных вычислений в диапазоне от -922337203685477, 5808 до 922337203685477, 5807
Date Хранение даты и времени. Даты от 1.01.100 до 31.12.9999 Время от 00: 00: 00 до 23: 59: 59
Double Хранение чисел двойной точности от -1, 79769313486232*10308 до -4, 94065645841247*10-324 от 4, 94065645841247*10-324 до 1, 79769313486232*10308
Integer Хранение целых чисел от -32768 до 32767
Long Хранение целых чисел от -2147483648 до 2147483647
Single Хранение чисел одинарной точности от -3, 402823*1038 до -1, 401298*10-45 от 1, 401298*10-45 до 3, 402823*1038
String Хранение текста длиной до 2 млрд. символов
Variant Хранение любого типа данных

ПЕРЕМЕННЫЕ VBA

Переменная - это имя, которое программист дает области компьютерной памяти, используемой для хранения данных какого-либо типа. Для лучшего понимания переменной можно провести аналогию, скажем, с автоматической камерой хранения на вокзале. Ячейки камеры, как известно, пронумерованы - это " имя" переменной (в отличие от камеры хранения, мы можем сами присваивать определенное имя переменной). То, что лежит в ячейке камеры хранения - это значение переменной. Оно может меняться, но номер ячейки (имя переменной) остается одним и тем же.

ИМЯ ПЕРЕМЕННОЙ

При выборе имени переменной необходимо соблюдать определенные правила:

· Имя переменной должно начинаться с буквы алфавита;

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

· Имена переменных не могут превышать 255 символов;

· Имя переменной должно быть уникальным в рамках его области действия. Оно должно быть уникальным в пределах процедуры или модуля, в которой объявлена эта переменная (по аналогии с камерой хранения: на одном вокзале не может быть двух ячеек с одинаковым номером).Имя переменной не может дублировать зарезервированные ключевые слова VBA;

· Имена переменных не чувствительны к состоянию регистра. Т.е. нет разницы между MyNumber, mynumber, mYnUmBeR.

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

СОЗДАНИЕ ПЕРЕМЕННОЙ

Самым простым способом создания переменной является использование ее в операторе VBA. При этом VBA создает переменную и резервирует память для переменной. Сохранение значения данных в переменной называется присваиванием переменной. Делается это с помощью оператора присваивания (=).

 

Например: Sum=120

 

Этот оператор сохраняет численное значение 120 в ячейке памяти, заданной переменной Sum.

Такое объявление переменной называется неявным объявлением переменной или объявление переменной на лету. Все переменные, которые VBA создает подобным образом, имеют тип данных Variant.

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

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

· Ускоряется выполнение кода;

· Уменьшается количество потенциальных ошибок при написании кода;

· Улучшается читабельность программного кода;

Нормализуется выделение заглавными буквами в имени переменной (т.е., если вы явно объявили имя переменной как " AllSumm", то при написании в теле кода этой переменной, как allsumm, автоматически произойдет замена на AllSumm)

Для явного объявления переменной используется оператор Dim (Dimension).

 

СИНТАКСИС:

Dim name1 [, name2…]

где: name N - любой допустимый идентификатор переменной.

 

Идентификатор - это имя, которое дается элементам в создаваемых процедурах и модулях, таким как переменные. Это обусловлено тем фактом, что создаваемые имена определяют конкретные участки памяти (имя переменной), группы инструкций (макрос или процедура).

 

НАПРИМЕР:

Dim MyValue

Dim Value_1, Value_2

 

Все переменные, созданные подобным образом, являются переменными типа Variant.

Когда VBA создает новую переменную, эта переменная инициализируется (переменной присваивается некоторое значение " по умолчанию" ):

строки инициализируются пустыми строками;

числа - значением 0;

переменные типа Boolean - False;

даты - 30 декабря 1899

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

ТИПИЗИРОВАННЫЕ ПЕРЕМЕННЫЕ

Все переменные в VBA, независимо от того, объявляются ли они неявно или явно, являются переменными типа Variant, если только не задается тип переменной в объявляющем ее операторе. Объявление типизированных переменных имеет ряд преимуществ:

· Типизированные переменные ускоряют выполнение кода программы;

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

· Программный код с типизированными переменными легче читается и понимается;

· В программах, использующих типизированные переменные, легче обнаружить некоторые ошибки программистов;

· Не возникает проблем с датами.

Тип переменной объявляется в том же операторе, который используется для объявления самой переменной. Можно объявлять типизированную переменную либо при неявном объявлении, либо при явном - с помощью оператора Dim.

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

 

СИНТАКСИС:

Dim varname_1 [As type1] [, varname_2 [As type2]..]

Varname_N - любое допустимое имя переменной

Type_N - любое из имен типов данных VBA (см. таблицу).

 

 

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

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

 

СИНТАКСИС:

Dim varname As String * N

Varname - любое допустимое имя переменной

N - целое число, указывающее длину строки

ОБЛАСТЬ ДЕЙСТВИЯ ПЕРЕМЕННЫХ

Любая переменная имеет свою область действия.

Термин область действия относится к области процедуры или модуля VBA, где данная переменная, процедура или другой идентификатор, являются доступными.

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

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

В первой строке, приведенного выше листинга, объявлена переменная А модульного типа. Однако в процедуре example_02 имеется свое объявление переменной А. VBA выбирает наиболее локальную переменную А, объявленную как переменная процедурного уровня.

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

Если вы хотите всегда использовать только явное объявление переменных, то для таких целей VBA предоставляет команду Option Explicit. При использовании Option Explicit VBA требует объявления всех переменных перед их использованием.

КОНСТАНТЫ VBA

Константа это значение в программе VBA, которое не изменяется.

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

Константы бывают литеральными и именованными.

Литеральная константа - это константа (число, строковое выражение, дата), расположенная непосредственно в коде.

 

НАПРИМЕР:

X = Y + 2

Здесь число 2 является литеральной константой.

 

Именованная константа, как правило, объявляется в начале модуля или процедуры (аналогично переменной) и предназначена для удобства чтения и понимания программного кода. Например, более целесообразно использовать в коде программы именованную константу Pi (которой присвоено значение 3, 14), чем литеральную константу 3, 14. Согласитесь, что выражение S = Pi * R* R Более " понятно", чем S = 3.14 * R * R.

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

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

ЛИТЕРАЛЬНЫЕ КОНСТАНТЫ

Существует несколько правил, которые необходимо соблюдать при написании литеральных констант.

Константы String

· Строковые константы должны быть заключены в двойные кавычки (" );

· Пустая строковая константа (так называемая " нулевая строка" ) обозначается двумя двойными кавычками, между которыми ничего нет (" " );

· Строковая константа обязательно должна вся находиться на одной строке.

Численные константы

· Численные константы могут содержать любой из численных типов VBA;

· Численные константы должны состоять только из числовых символов от 0 до 9;

· Численная константа может начинаться со знака (-) и может содержать десятичную точку;

· Можно использовать экспоненциальное представление для численных констант;

· Никакие другие символы или знаки не допускаются в численных константах.

Константы Date

Константы Date необходимо помещать между знаками фунта (#), при этом формат задания даты может быть различным:

#3-5-99#

#February 13, 2008 10: 15am#

#Jun-20-2005#

# 9 April 1998#

VBA переформатирует дату к следующему виду: #4/9/1998#

Если пропустить знак фунта (#) при записи литеральной константы даты, VBA не сможет правильно интерпретировать константу даты как дату;

Нельзя заключать литеральные константы даты в двойные кавычки, т.к. в этом случае VBA распознает такую константу как строковую.

Константы Boolean

Существуют только два вида констант типа Boolean: True , False. При этом их нельзя брать в кавычки или сокращать.

ИМЕНОВАННЫЕ КОНСТАНТЫ

При создании и объявлении именованных констант надо придерживаться тех же принципов, что и при работе с переменными.

Для объявления именованной константы предназначено ключевое слово Const

 

СИНТАКСИС:

Const name_1 = value_1 [opetator name_2..] [, name_3 =..]

Name_N - любой допустимый идентификатор имени константы;

Value_N - любое значение данных;

Opetator - арифметическая или операция сравнения между двумя именами ранее описанных констант.

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

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

 

ЗАДАНИЕ ТИПА КОНСТАНТЫ

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

В VBA можно задавать тип константы (по аналогии с переменными). Но в отличие от переменных нельзя задавать типы Object и Array. Например, в вышеприведенном листинге вполне уместно константе Pi задать тип Single

Const Pi As Single = 3.14

 

ВНУТРЕННИЕ КОНСТАНТЫ

Внутренняя константа - это именованная константа, которая была определена разработчиками VBA.

Помимо внутренних констант VBA существуют внутренние константы для работы с host-приложениями. Так, Excel содержит внутренние константы для использования с рабочими книгами электронных таблиц. Аналогично, Word содержит внутренние константы для работы с документами и шаблонами текстового редактора, а Access - для операций с базами данных.

Внутренние константы, определяемые VBA, начинаются с букв vb. Внутренние константы Excel - xl; Word - wd.

Внутренние константы, определяемые host-приложением VBA (например, Excel, Word) упрощают использование различных свойств и методов, принадлежащих этому host-приложению.

Для того, чтобы увидеть полный список имеющихся в наличии внутренних констант необходимо использовать Object Browser. Его можно вызвать клавишей F2 в окне редактора VBA.

Оператор вычитания (-)

Оператор вычитания выполняет две задачи: используется для вычитания одного числа из другого; обозначает унарный минус (это знак минус, который помещается пред числом для указания того, что это отрицательное число). Поместить унарный минус перед переменной или выражением означает то же, что умножить это число на -1.

Оба операнда в выражении вычитания должны быть численными переменными (выражениями) или строковыми выражениями, которое VBA может преобразовать в число. Можно использовать оператор вычитания для работы с датами.

VBA использует те же правила для определения типа данных результата выражения вычитания, что и для выражений, использующих оператор сложения. Но, есть дополнение:

· Если оба операнда в выражении являются типом Date, то результат выражения будет иметь тип Double.

Оператор умножения (*)

Оператор умножения перемножает два числа - результатом выражения умножения является произведение двух операндов. Оба операнда в выражении умножения должны быть численными выражениями или строками, которые VBA может преобразовать в число.

VBA следует тем же правилам для определения типа данных результата выражения умножения, что и для выражений, использующих оператор сложения. В выражениях умножения все переменные Variant, которые содержат значения типа Date, преобразуются в численные значения.

Оператор деления (/)

Оператор деления с плавающей точкой выполняет обычное арифметическое деление своих операндов.

В выражениях деления первый операнд делится на второй операнд - результатом деления является частное.

Оба операнда в выражении деления с плавающей точкой должны быть численными выражениями или строками, которые VBA может преобразовать в число.

Если хотя бы один операнд в выражении деления имеет тип Null, то результат деления также будет Null.

Типом данных операции деления с плавающей точкой является Double, за исключением:

Оба операнда в выражении деления имеют тип Integer или Single - результат Single;

Если результат выражения не переполняет диапазон значений для типа Single.

Целочисленное деление (\)

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

Оба операнда в выражении целочисленного деления должны быть численными выражениями или строками, которые VBA может преобразовать в число.

Перед выполнением операции целочисленного деления VBA округляет каждый операнд до числа типа Integer или Long (такой же тип имеет и результат целочисленного деления).

VBA отбрасывает (но не округляет! ) любой дробный остаток результата выражения целочисленного деления. Например, выражения 22\5 и 24\5 будут иметь один и тот же результат = 4.

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

Деление по модулю (Mod)

Деление по модулю как бы дополняет целочисленное деление. В делении по модулю выражение возвращает только остаток операции деления как целое.

 

22 Mod 5 = 2

24 Mod 5 = 4

25 Mod 5 = 0

Остальные свойства деления по модулю идентичны целочисленному делению.

Возведение в степень (^)

Оператор возведения в степень возводит число в степень.

 

5 ^ 3 =125

 

Оба оператора в выражении возведения в степень должны быть численными выражениями или строками, которые VBA может преобразовать в числа.

Операнд слева от оператора возведения в степень может быть отрицательным числом только, если операнд справа является целым.

Результат выражения имеет тип Double.

Если хотя бы один операнд в выражении имеет тип Null, то результат возведения в степень также будет Null.

Подведем итог вышеизложенному:

 

Оператор Синтаксис Описание
+ A + B Сложение: складывает А и В.
- A - B Вычитание: вычитает из А В.
* A * B Умножение: перемножает А на В.
/ A / B Деление: делит А на В.
\ A \ B Целочисленноеделение: делит А на В, отбрасывая дробную часть. Результат - целое число.
Mod A Mod B Делениепо модулю: делит А на В, возвращая только остаток операции деления как целое число.
^ A ^ B Возведение в степень: возводит А в степень В.

 

 

ЛОГИЧЕСКИЕ ОПЕРАТОРЫ VBA

Оператор Синтаксис Описание
AND A AND B Конъюнкция: Если А и В имеют значение True, то - True. Иначе - False
OR A OR B Дизъюнкция: Если любой из операндов имеет значение True, то - True. Иначе - False
NOT NOT A Отрицание: Если А имеет значение False, то - True. Иначе - False
XOR A XOR B Исключение: Если А имеет значение True или В имеет значение True, то - True. Иначе - False
EQV A EQV B Эквивалентность: Если А имеет такое же значение что и В, то - True. Иначе - False

 

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

Результатом логической операции является значение типа Boolean (или Null, если хотя бы один из операндов имеет значение Null).

 

Логический оператор AND

СИНТАКСИС:

Операнд_1 AND Операнд_2

Оператор AND выполняет логическую конъюнкцию.

 

Результатом данной операции является значение True, только когда оба операнда имеют значение True, иначе - False.

Таблица истинности

 

Операнд_1 Операнд_2 Результат
True True True
True False False
False True False
False False False

 

Оператор AND можно использовать для нескольких операндов:

(5< 7) AND (4> 3) AND (5=6) результатом будет False

 

Независимо от количества операндов результатом логической операции AND будет True только в том случае, когда все операнды выражения будут иметь значение True. В любом другом случае результатом будет False. Обратите внимание, что операнды заключаются в круглые скобки. VBA сначала вычисляет значение каждого операнда внутри скобок, а затем уже все выражение полностью.

Логический оператор OR

СИНТАКСИС:

Операнд_1 OR Операнд_2

Оператор OR выполняет логическую дизъюнкцию.

Результатом данной операции является значение True, если хотя бы один из операндов имеет значение True, иначе - False.

Таблица истинности

 

Операнд_1 Операнд_2 Результат
True True True
True False True
False True True
False False False

 

Оператор OR можно использовать для нескольких операндов:

(5< 7) OR (4> 3) OR (5=6) результатом будет True

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

Операторы AND и OR можно комбинировать:

((5< 7) AND (4> 3)) OR (5=6) результатом будет True

Логический оператор NOT

СИНТАКСИС:

NOT Операнд

Оператор NOT выполняет логическое отрицание.

Оператор NOT использует только один операнд.

Таблица истинности

 

Операнд Результат
True False
False True

 

Операторы AND OR NOT можно комбинировать:

((5< 7) AND (4> 3)) OR NOT (5=6) результатом будет True

Логический оператор XOR

СИНТАКСИС:

Операнд_1 XOR Операнд_2

Оператор XOR выполняет логическое исключение.

Результатом данной операции является значение True, если операнды имеют разные значения, иначе - False.

Таблица истинности

Операнд_1 Операнд_2 Результат
True True False
True False True
False True True
False False False

 

((5< 7) AND (4> 3)) OR NOT (5=6) XOR (5=5) результатом будет False

Логический оператор EQV

СИНТАКСИС:

Операнд_1 EQV Операнд_2

Оператор EQV - это оператор логической эквивалентности.

Результатом данной операции является значение True, если операнды имеют одинаковые значения, иначе - False.

Таблица истинности

 

Операнд_1 Операнд_2 Результат
True True True
True False False
False True False
False False True

 

((5< 7) AND (4> 3)) OR NOT (5=6) EQV (5=5) результатом будет True.

 

Операторы сравнения

Оператор Синтаксис Описание
= A = B Равенство: Если А равно В, то - True. Иначе - False
< A < B Меньше: Если А меньше В, то - True. Иначе - False
< = A < = B Меньше или равно: Если А меньше или равно В, то - True. Иначе - False
> A > B Больше: Если А больше В, то - True. Иначе - False
> = A > = B Больше или равно: Если А больше или равно В, то - True. Иначе - False
< > A < > B Не равно: Если А не равно В, то - True. Иначе - False

 

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

Результатом любой операции сравнения является значение типа Boolean: True, False.

Если оба операнда в выражении сравнения имеют один и тот же тип данных, VBA выполняет простое сравнение для этого типа.

Если оба операнда в выражении сравнения имеют определенные типы и эти типы не являются совместимыми, VBA выдает сообщение об ошибке несовпадения типов.

Если один или оба операнда в выражении сравнения являются переменными типа Variant, VBA пытается преобразовать тип Variant в какой-либо совместимый тип.

Функция InputBox

InputBox - еще одна довольно часто используемая функция для обмена данными с пользователем.

Полный синтаксис функции InputBox следующий:

 

InputBox (Prompt [, Title] [, Default] [, XPos] [, YPos] [, HelpFile, Context])

Аргументы Prompt (единственный обязательный аргумент), Title, HelpFile, Context - аналогичны уже рассмотренным одноименным аргументам функции MsgBox.

Аргумент Default - строковое выражение, использующееся как значение по умолчанию для пользовательского ввода.

Аргументы XPos , YPos - любые численные выражения. Эти аргументы задают координаты вывода диалогового окна на экране монитора. XPos - горизонтальное расстояние от левого края окна. YPos - вертикальное расстояние от верхнего края окна. Оба расстояния измеряются в твипах (1 твип = 1/20 точки = 0, 0007 дюйма). Следует быть внимательным при использовании этих аргументов, т.к. при их больших значениях диалоговое окно может " уехать" за пределы экрана монитора.

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

 

При вызове InputBox можно использовать именованные аргументы.

Нельзя смешивать именованные аргументы с обычным списком аргументов в одном и том же вызове функции

ФУНКЦИИ VBA

Ниже представлены таблицы с кратким описанием наиболее часто используемых функций VBA.

Математические функции

N - означает любое численное выражение. Все аргументы функций являются обязательными, если не указано иначе.

Функция(аргумент) Действие
Abs(N) Возвращает абсолютное значение аргумента N
Atn(N) Возвращает арктангенс N (радиан)
Cos(N) Возвращает косинус N (радиан)
Exp(N) Возвращает константу е (натуральный логарифм = 2.718282...), возведенную в степень N
Int(N) Возвращает целую часть N. Не округляет число, а отбрасывает любую дробную часть. Если N отрицательное число, то возвращается ближайшее отрицательное целое меньшее, чем или равное N
Log(N) Возвращает натуральный логарифм N
Rnd(N) Возвращает случайное число: аргумент является необязательным.
Sgn(N) Возвращает знак числа: -1, если N - отрицательное; 1, если N - положительное; 0, если N равно 0
Sin(N) Возвращает синус N (радиан)
Sqr(N) Возвращает корень квадратный из N. Если N является отрицательным числом - возвращается ошибка времени исполнения
Tan(N) Возвращает тангенс N (радиан)

 

ОПЕРАТОРЫ ВЕТВЛЕНИЯ VBA

До сих пор рассматривались процедуры и функции, которые VBA выполняет в линейном порядке - VBA начинает выполнение кода с первого оператора после строки объявления процедуры (функции) и продолжает выполнять каждый оператор построчно до тех пор, пока не будет достигнут оператор End Sub (End Function). Такой линейный алгоритм можно представить нижеследующей блок-схемой:

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

 

 

Операторы, выполняющие роль ветвления программы на основании какого-либо условия, называются операторами условного перехода.

Простейшими операторами условного перехода являются операторы If..Then; If..Then..Else. Первый оператор позволяет выбирать единственную ветвь процедуры (левая блок-схема), тогда как второй дает возможность выбирать из двух альтернативных ветвей кода процедуры (правая блок-схема) на основе оценки того, является ли условие равным True или False.

 

СИНТАКСИС IF..THEN

Вариант 1:

If Condition Then Statements

Вариант 2:

If Condition Then

Statements

End If

Condition - логическое выражение;

Statements - один, несколько или ни одного оператора VBA.

 

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

Второй вариант позволяет указывать несколько операторов в разных строках.

Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в секции Condition; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements; затем VBA продолжает выполнение кода следующего за строкой If..Then (Вариант 1) или за ключевыми словами End If (Вариант 2). Если же логическое выражение равно False, то операторы секции Statements пропускаются и выполняется код, следующий за этой секцией.

Ниже приведен листинг элементарного использования первого варианта написания If..Then:

А теперь - второй вариант:

 

Обратите внимание, что операторы секции Statements написаны с использованием отступа (используется табуляция). Это важный момент. Следует сразу приучать себя к подобному оформлению программного кода - это повышает его удобочитаемость и значительно облегчает поиск ошибок.

Синтаксис If..Then..Else

 

Вариант 1:

If Condition Then Statements Else ElseStatements

 

Вариант 2:

If Condition Then

Statements

Else ElseStatements

End If

 

Condition - логическое выражение;

Statements, ElseStatements - один, несколько или ни одного оператора VBA.

По аналогии с If..Then - первый вариант требует написания оператора в одну строку, при этом в секциях Statements и ElseStatements можно указывать несколько операторов, разделяя их двоеточием.

Второй вариант позволяет указывать несколько операторов в разных строках.

Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в секции Condition; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements; затем VBA продолжает выполнение кода следующего за строкой If..Then (Вариант 1) или за ключевыми словами End If (Вариант 2). Если же логическое выражение равно False, то выполняются операторы секции ElseStatements.

Следует сказать, что блок операторов If..Then..Else (Вариант 2) легче читать и понимать. Поэтому, советую использовать именно этот вариант, даже если в секциях Statements и ElseStatements будет находиться по одному оператору.

Если требуется реализовать более сложное ветвление используется следующая запись оператора выбора If..Then..ElseIf..End If:

 

СИНТАКСИС:

If Condition Then

Statements

ElseIf Condition1 Then

Statements1

…………………………

………………………….

ElseIf ConditionN Then

StatementsN

Else

ElseStatements

End If

Логика работы следующая: VBA сначала оценивает логическое выражение, представленное в секции Condition; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements; затем VBA продолжает выполнение кода следующего ключевым словом End If. Если же логическое выражение равно False, то выполняются проверка условия Condition1; если это логическое выражение равно True то выполняется оператор (операторы) секции Statements1; затем VBA продолжает выполнение кода следующего ключевым словом End If. В противном случае проверяется условие Condition2 и т.д. пока не будет выполнена проверка условия ConditionN; если это логическое выражение равно True то выполняется оператор (операторы) секции StatementsN; затем VBA продолжает выполнение кода следующего ключевым словом End If. Если же логическое выражение равно False, то выполняются операторы секции ElseStatements.

Sub sample3()

Dim value As Long

Const MSG = " Вы ввели число, "

value = InputBox(prompt: =" Введите число", Title: =" Пример 4" )

If value = 0 Then

MsgBox (MSG & " равное 0" )

ElseIf value > 0 Then

MsgBox (MSG & " большее 0" )

Else

MsgBox (MSG & " меньшее 0" )

End If

End Sub

 

 

ЦИКЛЫ VBA

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

Процесс выполнения все операторов, заключенных в структуру цикла, один раз называется итерацией цикла.

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

Блок операторов, находящийся между началом и концом цикла называется " тело цикла ".

Самой простой структурой цикла является фиксированный цикл.

Цикл For..Next

Синтаксис

For counter = Start To End [Step StepSize ]

Statements

Next [ counter ]

Counter - любая численная переменная VBA

Start - любое численное выражение, определяет начальное значение для переменной counter

End - численное выражение, определяет конечное значение для переменной counter

Statements - один, несколько или ни одного оператора VBA (тело цикла).

По умолчанию VBA увеличивает переменную counter на 1 каждый раз при выполнении операторов в цикле. Можно задать другое значение (SterSize - любое численное выражение), на которое будет изменяться counter.

Ключевое слово Next сообщает VBA о том, что достигнут конец цикла. Необязательная переменная counter после ключевого слова Next должна быть той же самой переменной counter, которая была задана после ключевого слова For в начале структуры цикла.

Ниже представлен листинг простейшего цикла For..Next, который считает сумму цифр от 1 до 10:

А теперь два варианта цикла For..Next с использованием шага цикла отличного от единицы:


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-11; Просмотров: 916; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.207 с.)
Главная | Случайная страница | Обратная связь