Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Занятие 2. Типы данных, переменные, константы



Типы данных, переменные, константы

Основные типы данных VBA: Byte (байт), Boolean (логическое), Integer (целое), Long (длинное целое), Single (с плавающей точкой обычной точности), Double (с плавающей точкой двойной точности), Date (дата), Object (ссылка на объект), String (строка). Тип Variant VBA использует как тип по умолчанию.

Переменные в программах объявляются с помощью инструкции:

Dim ИмяПеременной [ As ИмяТипа ] [, ИмяПеременной [ As ИмяТипа ]]

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

только z будет иметь тип Integer, а x и y – Variant.

Ключевое словоDim в объявлении переменной означает, что эта переменная – локальная. Если переменная объявлена внутри процедуры, то она доступна только в этой процедуре. Если переменная объявлена в разделе глобальных объявлений модуля (перед первой процедурой), то она может использоваться всеми процедурами этого модуля, но для других модулей такая переменная все равно будет «невидимой».

Вместо Dimможно использовать Private или Public. Private отличается от Dim тем, что не может объявлять переменные внутри процедуры, при объявлении же в разделе глобальных объявлений модуля Dim и Private равнозначны.

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

Переменные в программах на VBA можно не объявлять. В этом случае они по умолчанию имеют тип Variant. Как уже говорилось, подобный стиль программирования может приводить к трудно обнаруживаемым ошибкам. Если добавить в качестве первой строки модуля инструкцию Option Explicit, то при обнаружении в этом модуле необъявленной переменной будет выводиться сообщение об ошибке.

Константы в VBA объявляются с помощью слова Const. Ниже приведено несколько примеров:

VBA автоматически определяет тип константы по ее значению, но тип можно указать и явно, как это сделано в последнем примере. Если вы хотите объявить глобальную константу, то, как и для переменных, следует использовать слово Public.

Работа со строками

В VBA при работе с текстом используется тип String. Для строк фиксированной длины количество символов в строке указывается при объявлении переменной после символа звездочка. Если при присваивании фактическая длина строки будет меньше, то строка дополняется пробелами справа, если больше – то сохраняются первые символы строки, лишние символы в конце строки теряются. Для строк переменной длина не указывается. В следующем примере строка Name имеет длину 20 символов, а Text – переменную длину:

Основная операция над строками – конкатенация, т.е. слияние двух строк в одну. Для обозначения операции используется символ конкатенации & или оператор +. В случае использования & операнд, имеющий числовой тип, автоматически преобразуется в строку. При использовании оператора + этого не происходит. Например, если переменная X имела значение 2, значением выражения "Элемент " & X будет строка " Элемент 2", а при вычислении выражения "Элемент " + X возникнет ошибка.

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

Функция Описание
Str(число) Возвращает значение, являющееся строковым представлением числа.
Format(выражение [, формат]) Возвращает значение, отформатированное согласно инструкциям, заданным в описании формата. Можно представить числовые значения как дату, время, денежное значение или в специальном формате.
CStr(выражение) Возвращаемое значение зависит от выражения. Если выражение имеет тип Boolean, то возвращается строка "True" или "False". Если тип выражения Date, то – строка в кратком системном формате даты. Для других числовых типов возвращается строка, содержащая число.

Обратное преобразование из строкового представления в другой тип можно выполнить с помощью функций CBool, CByte, CCur, CDate, CDbl, CDec, CInt, CLng, CSng, Cvar. Они преобразуют выражение, заданное в качестве аргумента, в значение соответствующего типа. Выражение может быть строковым или числовым. Можно также использовать функцию Val(строка), которая возвращает для заданного аргумента числовое значение с подходящим типом данных.

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

В VBA существуют следующие функции для работы со строками:

Функция Описание
Asc(строка) Возвращает код первого символа строки.
Chr(кодСимвола) Возвращает символ, соответствующий указанному коду.
LCase(строка) Возвращает строку, преобразованную к нижнему регистру.
UCase(строка) Возвращает строку, преобразованную к верхнему регистру.
Left(строка, длина) Возвращает строку, содержащую указанное число первых символов исходной строки.
Right(строка, длина) Возвращает строку, содержащую указанное число последних символов исходной строки.
Mid(строка, позиция [, длина ]) Возвращает подстроку, начинающуюся в указанной позиции исходной строки и содержащую указанное число символов. Если длина подстроки не задана, то возвращаются все символы с указанной позиции до конца строки.
LTrim(строка) Возвращает копию строки, из которой удалены пробелы, находившиеся в начале строки.
RTrim(строка) Возвращает копию строки, из которой удалены пробелы, находившиеся в конце строки.
Trim(строка) Возвращает копию строки, из которой удалены пробелы, находившиеся в начале и конце строки.
Len(строка) Возвращает число символов в строке.
InStr([ позиция,] строка1, строка2 [, 0/1]) Возвращает позицию первого вхождения второй строки внутри первой строки. Поиск начинается с указанной позиции, а если она не задана, то с начала строки. Последний аргумент задает способ сравнения строк: 0 – сравнение кодов (по умолчанию), 1 – посимвольное сравнение без учета регистра.
StrComp(строка1, строка2 [, 0/1]) Возвращает: –1, если строка1 < строка2; 0, если строка1 = строка2; 1, если строка1 > строка2. Последний аргумент задает способ сравнения строк (см. InStr).
String(длина, символ) Возвращает строку указанной длины, состоящую из указанного символа.
Space(число) Возвращает строку, содержащую указанное число пробелов.

При сравнении строк нужно обращать внимание на регистр символов. Например, "Москва" и "МОСКВА" – это одинаковые строки или нет? В зависимости от ситуации ответ на этот вопрос будет разным. В VBA способ сравнения строк определяется инструкцией Option Compare. В режиме Option Compare Binary сравниваются коды символов строк (по умолчанию), в режиме Option Compare Text строки сравниваются посимвольно без учета регистра.

Для сравнения строк используются как обычные операторы сравнения <, >, =, <=, >=, <>, так и специальный оператор сравнения строк Like. В последнем случае образец может содержать подстановочные знаки (? – любой одиночный символ, * – любое количество символов или отсутствие символа, # – любая одиночная цифра (0–9), [список] – любой одиночный символ, входящий в список, [!список] – любой одиночный символ, не входящий в список). Например, выражение X Like "[О-Я]*" будет истинно, если значе-нием переменной X является любая строка, начинающаяся с русских букв от "О" до "Я".

Пример 2.1. Напишем функцию, которая по строке, содержащей фамилию, имя, отчество полностью, вычисляет строку, состоящую из фамилии и инициалов. Исходная строка может содержать любое количество пробелов между словами, в начале и конце строки. Например, значением функции Инициалы(" Иванов Иван Иванович ") будет строка "Иванов И.И.".

Работа с датами и временем

В VBA существует специальный тип данных Date для работы со значениями дат и времени. Переменные типа Date сохраняются как 64-разрядные (8-байтовые) числа с плавающей точкой. Целая часть числа представляет значение даты, а дробная значение времени. Полночи соответствует значение 0.0, а полудню – значение 0.5. Отсчет дат начинается с 31 декабря 1899 г., так что нулевым днем является 30 декабря 1899 г. Отрицательные целые числа представляют даты до 30 декабря 1899 г. Диапазон возможных значений дат от 1 января 100 г. до 31 декабря 9999 г. и значения времени от 0:00:00 до 23:59:59.

Для явного указания дат в тексте программы их следует заключать в символы #. Конкретный формат даты зависит от настроек компьютера. Например, так можно задать дату 1 декабря 1930 г.: #12/1/30#. Обратите внимание, что сначала указан месяц, а затем день. Если год вводится не полностью (2 последние цифры), то VBA использует интервал лет между 1930г. и 2029г.

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

интервал Определяет нужный компонент даты. Возможные значения параметра: "yyyy" – год, "q" – квартал, "m" – месяц, "y" – день года, "d" – день месяца, "w" – день недели, "ww" – неделя, "h" – часы, "n" – минуты, "s" – секунды.
первый_день Определяет, какой день недели считать первым. Если он опущен, первым днем недели считается воскресенье. Возможные значения параметра: 0 – используется значение национальных системных установок, 1 – воскресенье (по умолчанию), 2 – понедельник, 3 – вторник, 4 – среда, 5 – четверг, 6 – пятница, 7 – суббота.
первая_неделя Определяет, какая неделя считается первой неделей года. Возможные значения параметра: 0 – используется значение национальных системных установок, 1 – неделя, которая содержит 1 января (по умолчанию), 2 – первая неделя, которая содержит, по крайней мере, четыре дня нового года, 3 – первая полная неделя года.

Функции для работы с датами и временем:

Функция Описание
Date Возвращает значение, содержащее текущую системную дату.
Time Возвращает значение, содержащее текущее системное время.
Now Возвращает значение, содержащее текущую дату и время по системному календарю и часам компьютера.
Hour(время) Возвращает целое число (от 0 до 23 включительно), которое представляет часы в значении времени.
Minute(время) Возвращает целое число (от 0 до 59 включительно), которое представляет минуты в значении времени.
Second(время) Возвращает целое число (от 0 до 59 включительно), которое представляет секунды в значении времени.
Day(дата) Возвращает целое число (от 1 до 31 включительно), которое представляет день месяца в значении даты.
Month(дата) Возвращает целое число (от 1 до 12 включительно), которое представляет месяц в значении даты.
Year(дата) Возвращает целое число, представляющее год в значении даты.
Weekday(дата, [ первый_день ]) Возвращает целое число (от 1 до 7), представляющее номер дня недели в значении даты.
DatePart(интервал, дата [, первый_день [, первая_неделя ]]) Возвращает значение, содержащее компонент даты, указанный в параметре интервал. Например, номер месяца, номер недели, номер дня в году и т.п.
DateSerial(год, месяц, день) Возвращает дату во внутреннем представлении системы, полученную из отдельных компонентов (года, месяца и дня).
TimeSerial(часы, минуты, секунды) Возвращает время во внутреннем представлении системы, полученное из отдельных компонентов (часов, минут и секунд). Аргументы могут быть выражениями.
DateDiff(интервал, дата 1, дата 2 [, первый_день [, первая_неделя ]]) Возвращает разность между двумя датами (дата 2 – дата 1) в заданных интервалах (годах, днях, неделях, кварталах и т.д.). Если значение нецелое, то оно округляется с избытком. Поэтому при сравнении дат 31 декабря и 1 января следующего года функция для интервала типа год ("yyyy") возвращает значение 1, хотя разница между датами составляет всего один день.
DateAdd(интервал, количество, дата) Возвращает новую дату, которая получена путем добавления к указанной дате заданного количества интервалов. Например, DateAdd("m", 1, "31-янв-04") возвратит дату "29-фев-04".

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

Дата во внутреннем представлении – это количество дней, прошедших от установ-ленного в системе начального значения, поэтому функция DateSerial просто вычисляет по заданным значениям аргументов это число. Аргументы функции могут отличаться от календарных значений, как в нашем случае, они могут быть даже отрицательными, лишь бы полученный результат попадал в допустимый диапазон значений данных типа Date.

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

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

Пример 2.4. Существует много задач, в которых требуется вычислить, сколько времени (суток, часов, минут, секунд) прошло между двумя моментами времени. Приведенная функция показывает один из возможных способов решения этой задачи. Результат выводится в виде строки.

Реализация разветвляющихся алгоритмов

Разветвленные алгоритмы предусматривают выполнение различных инструкций в зависимости от выполнения или невыполнения некоторых условий. Для реализации таких алгоритмов в программах на VBA используются инструкции IF и Select Case. Однако сначала рассмотрим, как можно задать условие в программах на VBA.

С точки зрения синтаксиса условие – это логическое выражение, т.е. выражение, имеющее значение True или False. В простейшем случае это результат операции сравнения: меньше (<), больше (>), меньше или равно (<=), больше или равно (>=), равно (=), не равно (<>), соответствие строки маске (Like), сравнение объектов (Is).

Используя скобки и логические операции «И» (AND), «ИЛИ» (OR), отрицание (NOT), импликация (IMP), эквивалентность (EQV), исключающее «ИЛИ» (XOR) из простых выражений можно составить более сложные. В этих выражениях можно также использовать логические переменные и функции, возвращающие логические значения. Полное описание операций можно найти в справочной системе редактора VBE. Проще всего для этого воспользоваться контекстной справкой. Для получения контекстной справки установите курсор в тексте программы на нужной синтаксической конструкции и нажмите клавишу F1. Ниже приведены примеры логических выражений:

В VBA существуют две разновидности инструкции IF: линейная и блочная. Линейная форма IF предполагает, что вся конструкция размещается на одной строке. Инструкция имеет следующий синтаксис:

If условие Then инструкции [ Else инструкции ]

Если условие имеет значение True, то выполняются инструкции, указанные после Then, в противном случае – инструкции, указанные после Else. Секция Else может отсутствовать, в этом случае при невыполнении условия ничего не делается. Если после Then или Else нужно написать несколько инструкций (но все в одной строке), то они разделяются двоеточием. Примеры линейной инструкции If:

Линейная форма IF используется для программирования простых ветвлений. В более сложных случаях удобнее пользоваться блочной разновидностью инструкции IF:





Дата публикования: 2015-10-09; Прочитано: 223 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.01 с)...