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

Тип данных Object (Объект) хранит 4-х байтовую адресную ссылку на объект. Для присваивания переменной этого типа некоторого значения (адреса объекта) используется инструкция Set.

Тип данных Variant (Вариант) используется, когда никакой другой тип данных не был указан. Он может содержать данные любого типа. Тип данных Variant может также содержать специальные значения – Empty (Пусто), Error (Ошибка), Nothing (Ничего), и Null (Нуль). Тип данных, хранящийся в переменной типаVariant, можно определить с помощью функций VarType() и TypeName().

Данные типа Variant обладают свойствами тех данных, которые в них фактически хранятся. Например, если в переменной типа Variant записано значение типа Integer, то оно будет обрабатываться как Integer. Однако, если в результате выполнения арифметических действий над переменной типа Variant, содержащей значение типа Byte, Integer, Long или Single, результат превысит верхнее значение допустимого диапазона для исходного типа данных, он автоматически будет преобразована к следующему типу данных, с большим диапазоном значений. Так, Byte будет приведен к Integer, Integer – к Long, а Long и Single – к Double. Если же переменная типа Variant содержит значение типа Currency или Double, и происходит переполнение значения, –VBA просто зафиксирует ошибку

Переменная типа Variant будет содержать значение Empty, если она не была предварительно инициализирована, т.е. ей не было присвоено никакое начальное значение. Значение Empty соответствует значению 0, если переменная типа Variant используется в числовом контексте, и пустая строка нулевой длины – если она используется как переменная типа String. Не следует путать значения Empty и Null. Значение Null указывает на то, что переменная типа Variant преднамеренно не содержит никаких допустимых данных.

Error – это специальный подтип Variant, которое указывает что в процедуре имеется ошибка. Однако, в отличие от других видов ошибок, нормальная обработка ошибки уровня приложения не выполняется. Это позволяет пользователю, или приложению непосредственно, принимать некоторые альтернативные действия, основанное на значении ошибки. Значения Error создаются путем преобразования числовых значений с помощью функции CVErr.

Хотя использование переменных типа Variant удобно и освобождает от многих забот при создании программ, однако, такие переменные:

1.  требуют больше памяти, и

2.  большинство операций c ними выполняется гораздо медленнее, чем с другими типами данных.

Вообще-то, следует избегать неоправданного использования переменных типа Variant, поскольку это может:

1.  замедлить выполнение программы,

2.  затруднить понимание логики её работы и, кроме того,

3.  привести к появлению труднообнаруживаемых ошибок, связанных с недопустимым сочетанием типов данных.

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

Тогда, ознакомившись с правилами формирования имен переменных, и свойствами имеющихся в VBA типов данных, можно приступить к их явному созданию. Например, инструкция:

Dim strMsg As String

создает (объявляет, декларирует, определяет) переменную для хранения в ней символьных данных переменной длины типа String с именем strMsg. А инструкция:

Dim strTitle As String * 40

создает переменную с именем strTitle типа String фиксированной длины в 40 байт. Такие строки символов постоянной длины удобны, например, для вывода информации в колонках, или просто для того, чтобы длина строки никогда не превысила определенного значения.

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

Dim Var1

создает переменную Var1 типа Variant.

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

Dim dVar As Double, iVar As Integer

создаются две переменные dVar и iVar типов Double и Integer, соответственно. Создание нескольких переменных в одной инструкции может быть источником потенциальных ошибок. Например, если в следующей инструкции:

Dim iVar1, iVar2 As Integer

будет пропущен тип данных для первой переменной iVar1, она будет создана с типом данных Variant, вместо предполагаемого, например, Integer. Обнаружить подобную ошибку в программе, затем, будет достаточно трудно. Поэтому каждую переменную рекомендуется объявлять в отдельной строке, и желательно – с комментарием, который бы пояснял её назначение, как, например:

Dim iCounter As Integer  ' Счетчик циклов

Dim cPrice As Currency   ' Цена товара.

Явное указание типа переменной имеет несколько преимуществ:

1.  Требуется меньше времени на её обработку, поскольку VBA не нужно тратить время на определение того, что записано в присваиваемый по умолчанию тип Variant.

2.  Облегчает чтение и понимание программ.

3.  Предотвращает многие ошибки, такие, например, как недопустимое смешение типов.

При неявном объявлении переменной можно указать её тип, добавляя в конец имени переменной один из приведенных далее символов определения типа:

1.  !     Single

2.  @  Currency

3.  #    Double

4.  $    String

5.  %   Integer

6.  &   Long.

Например, в следующем фрагменте:

iVar% = 5

MsgBox iVar%