Лабораторная работа 17.
Переменные, типы данных и
константы.
Описание переменных
Dim имяПеременной [([индексы])] [as Тип]
Необязательные скобки и параметр индексы используют для описания массива (нумерация элементов массива начинается с 0), если в определении переменной отсутствует конструкция as Тип - тогда переменной присваивается тип Variant. Для создания массивов с большой размерностью, в описании необходимо указать требуемое число индексов.
Область определения переменной определяется тем, где и как описать переменную:
- личная переменная описывается с помощью инструкции Dim,
размещенной в процедуре;
- переменная уровня модуля описывается с помощью инструкции
Dim, размещенной в разделе описаний модуля;
- общая переменная описывается с помощью инструкции Public,
а не инструкции Dim, в разделе описаний модуля (Public
UserName as String).
Типы данных
№ п/п | Тип данных | Размер | Диапазон |
1 | Byte | 1 byte | 0 .. 255 |
2 | Boolean | 2 bytes | True или False |
3 | Integer | 2 bytes | -32,768 .. 32,767 |
4 | Long (длинное целое) | 4 bytes | -2,147,483,648 .. 2,147,483,647 |
5 | Single (число с плав. точкой одинарной точности) | 4 bytes | -3.402823E38 .. -1.401298E-45
для отрицательных значений; 1.401298E-45 .. 3.402823E38 для положительных значений |
6 | Double (число с плав. точкой двойной точности) | 8 bytes | -1.79769313486231E308 .. -4.94065645841247E-324 для отрицательных значений; 4.94065645841247E-324 .. 1.79769313486232E308 для положительных значений |
7 | Currency (денежный) | 8 bytes | -922,337,203,685,477.5808 .. 922,337,203,685,477.5807 |
8 | Decimal (десятичный) | 14 bytes | +/-79,228,162,514,264,337,593,543,950,335 без
дробной части; +/-7.9228162514264337593543950335 с 28 знаками после запятой; наименьшее ненулевое число: +/-0.0000000000000000000000000001 |
9 | Date | 8 bytes | January 1, 100 .. December 31, 9999 |
10 | Object | 4 bytes | любая ссылка на объект |
11 | String (строка переменной длины) |
10 bytes + string length | 0 .. около 2 биллионов |
12 | String (строка фиксированной длины) |
Length of string | 1 .. около 65,400 |
13 | Variant (с числами) |
16 bytes | любое числовое значение из диапазона Double |
14 | Variant (с символами) |
22 bytes + string length | строка переменной длины |
15 | User-defined (using Type) |
Number required by elements | диапазон каждого входящего элемента определяется типом элемента |
Если использовать переменную, не описывая ее, то эта переменная по умолчанию получает тип Variant. Кроме того, тип Variant можно задавать явно. Переменные типа Variant содержат данные любого типа, исключая строки фиксированной длины и типы, определяемые пользователем. Во многих случая имеется возможность преобразовать один тип данных в другой и объединить данные различных типов. При использовании типа Variant упрощается обработка чисел.
Пример:
Dim x as Byte
Dim y as Variant
x = 100
y = x
y = y*3
В данном случает переменная y сначала рассматривается как Byte, но когда ее значение становится больше максимально допустимого значения для Byte, она преобразуется в целое число. Если значение переменной превышает максимальную величину типов Double, Currency, Decimal, то возникает ошибка выполнения: Переполнение.
Пример:
Sub LoopTest
Dim Counter as Integer
Counter = 1
While Counter <= 100
' некоторые действия
Counter = Countr + 1
Wend
End Sub
В данном случае цикл становится бесконечным, потому что из-за ошибки программиста значение переменной Countr равно 0 (использование переменной без объявления) и значение Counter равно 1. Для исключения подобной ошибки можно задать в разделе описаний модуля инструкцию Option Explicit, которая определяет явное объявление переменных. Для того, чтобы VBA автоматически добавлял инструкцию Option Explicit в каждый проект необходимо установить флажок Require Variable Declaration (явное описание переменных) во вкладке Editor меню Tools/Options.
В VBA имеется группа функций для определения подтипа переменной типа Variant:
№ п/п | Имя функции | Описание |
1 | isNumeric(выражение) | Возвращает значение True, если выражение возвращает числовое значение |
2 | isArray(переменная) | Возвращает значение True, если переменная является массивом |
3 | isDate(выражение) | Возвращает значение True, если значение выражения можно преобразовать в значение даты |
4 | isEmpty(переменная) | Возвращает значение True, если переменная была инициализирована |
5 | isError(выражение) | Возвращает значение True, если выражение представляет значение ошибки |
6 | isNull(выражение) | Возвращает значение True, если значение выражения является пустым (Null) |
7 | isObject(идентификатор) | Возвращает значение True, если идентификатор представляет объектную переменную |
8 | TypeName(имяПеременной) | Возвращает значение типа String, представляющее тип переменной |
9 | VarType(имяПеременной) | Возвращает значение типа Integer, указывающее на подтип переменной Variant |
Задание собственных типов данных
Инструкция Type позволяет описать собственные типы данных, созданные на основе стандартных.
[Private | Public] Type имяПеременной
имяЭлемента [([индексы])]
as Тип
[имяЭлемента [([индексы])]
as Тип]
...
End Type
Константы
[Public | Private] Const имяКонстанты as Тип = значение
Использование стандартных констант
Значения аргументов функции MsgBox()
№п/п | Константа | Значение | Описание |
1 | VbOKOnly | 0 | Отображается только кнопка OK |
2 | VbOKCancel | 1 | Отображаются кнопки OK и Отмена (Cancel) |
3 | VbAbortRetryIgnore | 2 | Отображаются кнопки Прервать (Abort), Повторить (Retry) и Пропустить (Ignore) |
4 | VbYesNoCancel | 3 | Отображаются кнопки Да (Yes), Нет (No) и Отмена (Cancel) |
5 | VbYesNo | 4 | Отображаются кнопки Да и Нет |
6 | VbRetryCancel | 5 | Отображаются кнопки Повторить и Отмена |
7 | VbCritical | 16 | Используется значок Критическое сообщение |
8 | VbQuestion | 32 | Используется значок Предупреждающий запрос |
9 | VbExclamation | 48 | Используется значок Предупреждение |
10 | VbInformation | 64 | Используется значок Информационное сообщение |
11 | VbDefaultButton1 | 0 | Основной является первая кнопка |
12 | VbDefaultButton2 | 256 | Основной является вторая кнопка |
13 | VbDefaultButton3 | 512 | Основной является третья кнопка |
14 | VbApplicationModal | 0 | Модальное окно на уровне приложения |
15 | VbSystemModal | 4096 | Модальное окно на уровне системы |
Значения, возвращаемые функцией MsgBox()
№п/п | Константа | Значение | Нажатая кнопка |
1 | vbOK | 1 | ОК |
2 | vbCancel | 2 | Отмена |
3 | vbAbort | 3 | Прервать |
4 | vbRetry | 4 | Повторить |
5 | vbIgnore | 5 | Пропустить |
6 | vbYes | 6 | Да |
7 | vbNo | 7 | Нет |