Переменные и
свойства объектов в VBA
Описанные в
процедурах VBA действия выполняются над
переменными или объектами. Переменные VBA аналогичны
переменным других языков программирования. Объекты, с которыми работают
процедуры и функции VBA, представляют собой средство
программного управления приложениями Office 2000 и
созданными с их помощью документами. Как и в других объектно-ориентированных
языках программирования, у объектов VBA имеются свойства,
которые могут принимать различные значения. Эти значения можно
использовать в инструкциях VBA в качестве
переменных.
Иерархия как общих объектов Office 2000, так и отдельных приложений описывается объектными
моделями. Объектная модель описывает вложенность классов объектов,
свойства, имеющиеся у объектов каждого из классов, а также методы —операции,
с помощью которых можно менять значения этих свойств. Более подробно объектные
модели описываются в справочной системе по программированию на языке VBA и специальных изданиях, посвященных разработке приложений в
рамках Office 2000.
Использованию
переменной обычно предшествует ее объявление — инструкция Dim, в которой указывается как имя переменной, так и тип
данных, для хранения которых она предназначена. Хотя такая инструкция и не
обязательна (VBA может определять тип данных
переменной по последнему символу ее имени: ! # $ % & @), тем не менее
хороший стиль программирования требует предварительного описания всех
используемых переменных. Имена переменных могут иметь длину до 255 символов (в
том числе — символов кириллицы), и не должны содержать пробелов, знаков
препинания и перечисленных выше специальных символов (за исключением последнего
знака). Они не могут также совпадать с ключевыми словами VBA и именами стандартных объектов.
ПРИМЕЧАНИЕ
Чтобы выбранное
имя переменной случайно не совпало с ключевым словом или названием стандартного
объекта, достаточно всегда начинать имена переменных со строчной буквы (первые
символы ключевых слов и имена стандартных объектов автоматически преобразуются
системой программирования VBA в прописные).
В листинге 14.3
приведены примеры описания переменных различного типа с помощью инструкции Dim.
Листинг 14.3. Описание
переменных
Dim a, b As Integer
Dim дата_рождения As Date
Dim Фамилия As String, Имя As String * 25
В процедурах и
функциях VBA могут использоваться следующие
типы данных:
О Boolean — логические
переменные, принимающие одно из двух значений: ИСТИНА или ЛОЖЬ;
О Byte — целое число в
диапазоне от 0 до 255;
О Currency — переменные для
денежных вычислений с фиксированным количеством разрядов после десятичной
запятой; позволяют избежать накопления погрешностей округления;
О Date — переменные для
хранения даты и времени;
О Double — переменные для
хранения значений с плавающей точкой удвоенной точности;
О Integer — целые числа в диапазоне от -32768 до
32767;
О Long— целые числа в диапазоне от
-2147483648 до 2147483647;
О Object — переменные для
хранения ссылок на объекты;
О Single — переменные для
хранения значений одинарной точности с плавающей точкой;
О String — переменные для
хранения строк длиной от 0 до 64К символов;
О Variant — переменные,
тип которых определяется типом последнего значения, присвоенного им.
Кроме
стандартных типов данных VBA предоставляет
пользователю возможность создавать собственные типы данных (структуры) и
хранить данные в массивах (группах переменных с общим именем, различаемых по
сочетанию индексов). Кроме переменных, типы данных описываются для формальных параметров
процедур и функций и для самих функций (тип возвращаемого функцией значения). В
листинге 14.4 приведены примеры описания формальных параметров и возвращаемого
значения для процедуры и функции, вычисляющих длину строки, которая получается
при соединении фамилии и имени (с разделяющим их пробелом).
Листинг 14.4. Описания
переменных
Sub FIOL(фамилия As String, имя As String, длина_строки As Integer)
длина_строки = Lеn(фамилия) + Lеn(имя) + 1
End Sub
Function FIOLеп(фамилия As String, имя As String) As Integer
FlOlen =Lеn(фамилия) + Lеп(имя) + 1
End Function
В программах на VBA часто встречаются переменные, содержащие ссылку на объект
— объектные переменные. Их применение позволяет удобнее организовать
работу с различными объектами. Для задания значения объектной переменной
(назначения ссылки на объект) используется инструкция Set. Применение объектных переменных совместно с парой инструкций
With имя объектной переменной
. ..
End With
позволяет
выполнить несколько операций с одним объектом без его повторного поиска. В
листинге 14.5 приведен пример процедуры, выполняющей с первой ячейкой
выделенной области рабочего листа Excel следующие
действия: увеличивает хранящееся в ней значение на единицу; увеличивает кегль
на два пункта; изменяет на противоположный режим курсива (если значение
выводилось курсивом, то будет выведено прямым шрифтом, и наоборот).
Листинг 14.5. Пример процедуры,
изменяющей содержимое ячейки
Sub
Объектные_переменные( )
Dim r As Object
Set
r = Selection. Cells(1)
With r
.Value = .Value +1
.Font. Size =
.Font. Size +2
.Font. Italic = Not (. Font. Italic)
End With
ПРИМЕЧАНИЕ
В данном примере в качестве переменных используются три
свойства обьекта
класса «ячейка рабочего листа». Значение свойства Value определяется значени
ем хранящегося в ячейке числа. Свойство Font (характеристики шрифта) — составное и представляет собой
структуру данных, в которую, среди прочих, входят элементарные свойства Font. Size (кегль символов,
число) и Font. Italic (признак курсивного начертания, логическое значение). Обратите
внимание на то, что для уточнения имени свойства снова используется операция,
обозначаемая точкой.
Область
действия переменных VBA определяется местом их описания.
Если переменная описана внутри процедуры или функции, ее область действия ограничивается
этой процедурой или функцией. Любая попытка использования имени этой переменной
вне процедуры или функции, содержащей ее описание, приведет либо к ошибке, либо
к созданию новой переменной с тем же именем, но другой областью действия. Если
переменная описана на уровне модуля (соответствующая ей инструкция Dim помещена непосредственно в модуль, перед описанием
процедур и функций), тогда ею можно будет пользоваться из любой процедуры или
функции, описанной в этом модуле. Если переменной придется пользоваться из
процедур и функций, описанных в различных модулях проекта, в этом случае ее
следует описать в одном из его модулей, воспользовавшись вместо инструкции Dim совпадающей с ней по синтаксису инструкцией Public.
Область действия
процедуры или функции может ограничиваться модулем, в котором она описана, или
всем проектом. Второй вариант используется по умолчанию. Если по той или иной
причине требуется, чтобы имя процедуры или функции было определено только
внутри модуля, в котором она описана, тогда в начало инструкции Sub или Function добавляется
ключевое слово Private.
Имена
стандартных объектов и их свойств определены в пределах всего проекта после
подключения соответствующей библиотеки объектов. Библиотеки объектов
(файлы с расширением .olb) содержат в
себе описания классов объектов. Две стандартные библиотеки объектов содержат в
себе объектную модель самого VBA и объектную
модель компонентов, являющихся общими для всех приложений пакета Office 2000. Кроме объектных библиотек, содержащих модели
компонентов каждого из приложений, имеются библиотеки объектов, реализующих
связь с Web и другие новые возможности
пакета, а также библиотека OLE Automation, организующая автоматизацию совместной
работы приложений пакета.
ПРИМЕЧАНИЕ
В проекте VBA всегда доступно несколько объектных библиотек: объектная
библиотека приложения пакета Office 2000, документ
которого содержит описание
проекта; общие объектные библиотеки VBA и Office 2000; специальные библиотеки приложения. Если в проекте
предполагается использовать объекты другого
приложения или объекты из дополнительных библиотек, соответствующую объектную
библиотеку следует подключить. Это делается с помощью диалогового окна
Ссылки (References), открывающегося
при выборе команды Сервис > Ссылки (Tools >
References) в редакторе VBA. Если этого не сделать, объектная библиотека будет
недоступна и имена содержащихся в ней объектов внутри проекта будут не определены.