Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
VBA 13 Приложение 2.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
91.14 Кб
Скачать

- 7 -

13. Приложение 2 Переменные

Любая программа (макрос, процедура, функция) создает и использует переменные. Большинство ошибок в программе – неправильная работа с переменными. Приведем основные правила работы с переменными и укажем распространенные причины ошибок.

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

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

  • Имя должно начинаться с буквы и может содержать до 254 символов: буквы, цифры и знаки препинания.

  • В имени нельзя использовать специальные символы: #, $, %, &, !, /, \

  • В имени нельзя использовать пробелы и точки, вместо них принято ставить знак подчеркивания _.

  • VBA не различает регистры. Но в сложном имени принято каждое слово начинать с большой буквы: UserName.

Явное объявление переменной

Оператор явного объявления переменной может находиться в любом месте программы до первого использования переменной. Синтаксис:

Dim <имя переменной> As <тип переменной>

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

Dim i, j, k As Integer

Здесь только k объявляется как Integer, другие же переменные получают тип Variant (изменяющийся), то есть типы переменных i, j будут зависеть от использования переменных, и могут меняться в разных операторах. Часто это приводит к ошибкам в программе на этапе исполнения, которые очень трудно искать.

Если для программы установлено требование явного описания типов всех переменных (оператор Option Explicit в начале модуля), то при использовании переменной j типа Variant в другой программе, где она в списке аргументов описана другим типом, например, j As Integer, на этапе компиляции возникает ошибка:

То есть обнаружено смешение (mismatch), несоответствие типов для аргумента, переданного в программу по ссылке (ByRef), то есть по адресу переменной в оперативной памяти. Нажатие клавиши <OK> открывает тот модуль и то место в программе, где темным фоном выделена конфликтная переменная. Заголовок программы будет выделен желтым фоном.

Для исправления ошибки нужно все переменные объявить как Integer, например, следующим оператором:

Dim i As Integer, j As Integer, k As Integer

После исправления ошибки нужно выполнить команду меню Run/Reset, желтый фон исчезнет, и можно будет снова запустить программу.

Типы переменных

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

Тип данных

Длина в байтах, тип

Диапазон значений

Byte

1 короткое целое

от 0 до 255

Boolean

2 логическое

True =1 или False =0

Integer

2 целое

от -32768 до +32767

Long

4 длинное целое

от –2147483648 до +2147483647

Single

4 число с плавающей точкой

от –3,4×1038 до –1,4×10-45 от +1,4×10-45 до +3,4×1038 7-8 значащих цифр

Double

8 число с плавающей точкой двойной точности, в ячейках листа Excel

от –1,8×10308 до –4,9×10-324 от +4,9×10-324 до +1,8×10308 15 значащих цифр

Currency

8 число с фиксированной точкой, денежная единица

от –922’337’203’685’477,5808 до +922’337’203’685’477,5807

Decimal

14 десятичное число, только внутри переменной Variant

28 цифр в числе, все до запятой или все после запятой

Date

8 Дата/Время

1.01.100 – 31.12.9999

Dim dtVar As Date DtVar=#1/21/04# ′станд. USA

Object

4 байта

Любая ссылка на объект

String (перем.длина)

10 байт + длина строки (1 байт на символ)

От 0 до 2147483647 байт Dim St As String St=”Привет!”

String*длина (фикс.длина)

длина строки (1 байт на символ)

Dim St As String*20 St=”Привет!”

Variant

16 любой тип данных

любое числ. значение в рамках диапазона типа Double

Variant (символы)

22 байта + длина строки (1 байт на символ)

любое числ. значение в рамках диапазона типа Double

Usertype

Пользовательский тип данных

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]