Базовые типы данных и операции над ними, страница 5

в первой инструкции создается переменная целого типа iVar%, и ей присваивается значение 5, а во второй – с помощью функции MsgBox выводится значение этой переменной. Не существует символов определения типа для таких типов данных, как Byte, Boolean, Date и Object. Символ определения типа может находиться только в конце имени переменной. В VBA символы определения типа оставлены только лишь для совместимости с предыдущими версиями языка. Во вновь создаваемых программах следует использовать только инструкциею Dim, поскольку она предоставляет гораздо больше возможностей, и блокирует появление некоторых потенциальных ошибок, связанных с неправильным применением типов данных. В инструкциях Dim  не допускается использование имен переменных, которые оканчиваются на один из символов определения типа.

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

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

Директива Option Explicit воздействует только на тот модуль, в котором она появилась. Если же в проекте несколько модулей, эту директиву необходимо поместить в каждый из них, в котором необходимо запретить неявное создание переменных. Хорошей практикой является использование директивы транслятора Option Explicit при написании программ. Для её автоматического включения во все вновь создаваемые модули необходимо установит флажок Require Variable Declaration (Требовать объявления переменных) на вкладке Editor (Редактор) окна диалога Options (Параметры). Однако, состояние этого флажка повлияет только на вновь создаваемые модули. Если же директиву Option Explicit необходимо вставить в модули, созданные ранее, это придется сделать вручную. Состояние флажка Require Variable Declaration оказывает влияние на работу VBA, из какого бы приложения он не был запущен.

Объявлять переменную можно только один раз. Это может быть сделано в любом месте программы, но обязательно до первого её упоминания. Хорошей практикой следует считать вынесение объявлений всех переменных в начало программы. Создавая новую переменную, VBA инициализирует ее, т.е. присваивает некоторое начальное значение. При этом:

r  строки переменной длины – получают нулевую длину,

r  строки фиксированной длины – заполняются нулями,

r  числа – принимают значение 0,

r  Date – значение 30 декабря 1899 года,

r  Variant – значением Empty.

В листинге, приведенном далее, представлена отредактированная процедура Hello, в которой все используемые переменные объявлены явно:

1: Option Explicit

2: Sub Hello()

3:    Dim strMsg As String    ' Сообщение

4:    Dim strTitle As String  ' Заголовок окна

5:    strMsg = "Здравствуй, Мир!"

6:    strTitle = "Окно приветствия"

7:    MsgBox strMsg, , strTitle

8: End Sub

В ней:

Строка 1 – запрещает неявное создание переменных.

Строка 2 – заголовок процедуры Hello.

Строки 3 и 4 – создаются две переменные типа String strMsg и strTitle для хранения текста сообщения и заголовка окна, соответственно.

Строки 5 и 6 – переменным strMsg и strTitle присваиваются значения текстовых констант.

Строка 7 – Вывод сообщения.

Строка 8 – Завершение процедуры.

Константы – это элементы внутренних данных программы, которые в течение её выполнения своего значения не изменяют, т.е. в выражениях они могут использоваться только справа от оператора присваивания (=). Константы, также как и переменные, занимают некоторые участки оперативной памяти компьютера (ячейки), внутренняя структура которых (или внутреннее представление) также зависит от их типа. Они, также как и переменные, характеризуются:

1.  типом и

2.  значением,

а некоторые из них – и

3.  именем.

То есть, бывает два вида констант:

1.  поименованные, и

2.  непоименованные – литералы.

При создании константы:

1.  под неё выделяется участок оперативной памяти требуемого размера,

2.  в него обязательно заносится значение этой константы, и

3.  в случае поименованной константы – ему присваивается имя.

В этом смысле константа очень похожа на переменную. Разница состоит лишь в том, что в процессе выполнения программы значение константы не изменяется, т.е. что было записано в выделенный под константу участок оперативной памяти при её создании, то там и остается до конца выполнения программы. Для того же, чтобы изменить значение константы, необходимо:

1.  В окне Code редактора Visual Basic в исходном тексте программы откорректировать необходимое значение.

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

Большинству из типов данных, используемому в VBA, соответствует свой тип констант. Одним из таких типов – строковым – мы уже неформально пользовались. Далее, более формально, рассмотрим правила создания и использования каждого из типов литералов.

Строковые константы – это константы типа String. В программах на VBA они подчиняются следующим правилам:

1.  Значение строковой константы должно быть заключено в двойные кавычки, например, "Это правильная строковая константа". Сами кавычки при этом в содержание константы не входят, а служат лишь для отделения текста константы от других элементов языка.