Задание Описание переменных 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 любая ссылка на объект String (строка 11 переменной длины) 10 bytes + string 0 .. около 2 биллионов length String (строка 12 фиксированной длины) Length of 1 .. около 65,400 string 13 Variant (с числами) 16 bytes любое числовое значение из диапазона Double Variant 14 (с символами) 15 User-defined (using Type) 22 bytes + string строка переменной длины length 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 Нет