Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Часть 2. Основы офисного программирования.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
4.04 Mб
Скачать

5.2.4. Типы данных vba

VBA поддерживает многочисленные типы данных. Стандартными типами являются Boolean (логические значения), Byte, Integer, Long (целочисленные значения), Double, Single (действительные числа с плавающей точкой), Currency (денежные значения), Date (значения даты и времени), String (строковый тип), Object (объектные переменные), Variant (тип, к которому относятся все переменные, не описанные явно с другим типом данных). Пользователь может определить свой тип данных с помощью ключевого слова Type.

Подробную информацию об использовании различных типов, их совместимости можно получить в справочном руководстве по Visual Basic (раздел «Типы данных»).

5.2.5. Описания переменных

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

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

Option Explicit

Этот режим задается при установке параметров с помощью соответствующей команды меню Сервис. В открывшемся диалоговом окне нужно установить флажок «явное описание переменных».

Неописанные переменные приобретают тип данных Variant. Этот тип данных упрощает написание программ, но его использование может снизить эффективность программы.

Следует предусмотреть применение других типов данных, если: программа имеет большой размер и очень много переменных; требуется как можно более быстрое выполнение программы; выполняется прямая запись данных в файлы с произвольным доступом.

Для описания переменной определенного типа используется инструкция Dim, имеющая вид:

Dim ИмяПеременной As ТипДанных

(при описании синтаксических правил полужирным шрифтом показаны ключевые слова VBA, а курсивом – синтаксические обозначения, которые при вводе текстов программ должны заменяться на конкретные значения, имена и т.п.). Например:

Dim X As Integer

Эта инструкция описывает переменную X как целое число типа Integer (с диапазоном значений от -32768 и до 32767). При попытке присвоить X значение, выходящее за пределы этого диапазона, возникает ошибка. При присваивании X дробного числа, выполняется округление. Например:

X = 32768 ' Вызывает ошибку.

X = 5.9 ' Задает для Х значение 6.

Таким образом, явное указание типов переменных является средством предотвращения ошибок, неправильного использования переменных в программах.

В одном операторе Dim может быть описано несколько переменных, тогда их описания перечисляются через запятую:

Dim ИмяПеременной As ТипДанных, …, _ ИмяПеременной As ТипДанных

В зависимости от того, где и как описана переменная, определяется область ее видимости и время жизни. Временем жизни (областью действия) переменной называется время, в течение которого переменная доступна и может иметь значение. Значение переменной может меняться на протяжении ее времени жизни, но в течение этого времени она обязательно имеет какое-либо значение. Когда переменная теряет область определения, она более не имеет значения.

Переменная имеет область действия уровня процедуры, если она описана в теле подпрограммы.

В начале выполнения процедуры в VBA все переменные инициализируются. Например: числовая переменная получает значение 0, строка переменной длины получает значение пустой строки (""), а строка фиксированной длины заполняется ASCII-символом 0 или Chr(0). Переменные типа Variant получают при инициализации значение Empty. Каждый элемент массива переменных с определяемым пользователем типом при инициализации получает значение, которое он получил бы, если бы являлся одиночной переменной.

Если описание переменной помещено в раздел описаний модуля, перед описаниями всех процедур и функций, переменная имеет область действия уровня модуля. Такие переменные доступны во всех процедурах модуля.

Переменные с областью действия уровня проекта описываются с использованием ключевого слова Public. Описания таких переменных размещаются в разделе описания любого модуля проекта.

Описание с ключевым словом Static переменных в процедурах позволяет «жить» таким переменным до окончания выполнения кода, т.е. их значения сохраняются между вызовами процедуры.

При описании объектной переменной для нее выделяется память, но ее значение определяется как Nothing до тех пор, пока ей не присвоена ссылка на объект с помощью инструкции Set.

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

Переменная, описанная с помощью инструкции Dim на уровне процедуры, сохраняет значение до окончания выполнения процедуры. Если процедура вызывает другие процедуры, переменная сохраняет свое значение, пока не закончится выполнение и этих процедур.

Если переменная уровня процедуры описана с помощью ключевого слова Static, она сохраняет свое значение до тех пор, пока программа выполняется в каком-либо модуле (т.е. такая переменная является статической). По завершении работы всей программы переменная теряет свою область определения и свое значение. Ее время жизни совпадает со временем жизни переменной уровня модуля.

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

Если перед инструкциями Sub или Function в заголовке процедуры имеется ключевое слово Static, значения всех переменных уровня процедуры сохраняются между вызовами процедуры.

В VBA, если переменная не описана, по умолчанию для нее используется тип Variant, но тип данных по умолчанию можно изменить, поместив инструкции описания DefТип в начало модуля. Этот оператор использует в качестве аргументов начальные буквы имен переменных, которым по умолчанию будет приписан заданный в операторе тип. Данная инструкция начинается с ключевого слова, обозначающего тип (например: DefInt – для определения начальных букв имен целочисленных переменных, DefStr – строковых переменных). В одной строке может быть несколько инструкций, отделенных друг от друга двоеточием:

DefStr S: DefInt I: DefCur C

После такой декларации все неописанные переменные, имена которых, начинаются на I, будут отнесены к типу Integer, на C – к типу Currency, на S – к String.

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

Дополнительные сведения о присвоения имен переменным содержатся в разделе справочника Visual Basic «Правила присвоения имен в языке Visual Basic».