Объявление объектных переменных
В дополнение к типам Byte, Integer, Long, Single, Double и StringVBA также имеет тип Object. Переменные или выражения типа Object ссылаются на объект VBA или на объект, принадлежащий host-приложению, такой как Excel-объекты Workbook, Worksheet и Rangeили Word-объекты Document, Range, Paragraph.
Как и в случае с другими типами VBA, можно объявлять переменные в модулях, процедурах и функциях с определенным типом Object, что показано в следующем операторе:
Dim myObject As Object
Если переменная типа Object используется для некоторых специфических типов объектов, можно также объявлять объектную переменную для этого специфического типа объекта:
Dim InstBook As Workbook
Объектную переменную InstBook, создаваемую этим оператором Dim, можно использовать только для сохранения ссылок на объекты Workbook. При попытке присвоить переменной InstBookссылку на объект Rangeили WorksheetVBA отображает сообщение об ошибке несовпадения типов.
Объект в выражениях
Объектное выражение – это выражение VBA, которое определяет отдельный объект. Все объектные выражения должны вычисляться до единственной объектной ссылки (ссылки на объект); объектные выражения используются с единственной целью – создание ссылок на специфические объекты в программах VBA.
Объектное выражение может состоять из объектных переменных, объектных ссылок или объектного метода или свойства, которое возвращает объект:
Application | Имя объекта: ссылается на объект приложения |
Application.ActiveSheet | Объектное свойство, которое возвращает ссылку на объект: активный лист |
Application.Workbooks | Объектный метод, который возвращает коллекцию объектов: все открытые рабочие книги |
ABook | Объектная переменная: инициализированная в операторе Set, ссылается на объект |
Нельзя использовать переменные типа Object или объектные выражения в арифметических, логических или операциях сравнения. Объектная ссылка, созданная с помощью объектного выражения или сохраненная в объектной переменной, в действительности, является только адресом, указывающим место в памяти компьютера, где сохранен объект, на который выполняется ссылка. Поскольку объектная ссылка – это адрес памяти, арифметические, логические операторы и операторы сравнения не имеют смысла.
Перед использованием объектной переменной для ссылки на объект необходимо задать эту переменную, чтобы она содержала ссылку на нужный объект. Присваивание объектной ссылки объектной переменной отличается от присваиваний других переменных; чтобы присвоить объектную ссылку объектной переменной, используйте оператор Set.
Оператор Setимеет следующий синтаксис:
Set Var = Object
Var – это любая объектная переменная или переменная типа Variant;
Object – любая допустимая объектная ссылка; это может быть другая объектная переменная или объектное выражение.
Если Var – переменная, объявленная с каким-либо определенным типом (например, Range или Workbook), этот тип должен быть совместим с объектом, на который ссылается Object.
Dim InstSheet As Worksheet
Set InstSheet = Application.ActiveSheet
Чтобы задать отдельный объект в выражении или объектную переменную для ссылки на этот объект, используются методы и свойства, возвращающие объекты, такие как свойства ActiveWorkbookи ActiveSheetобъекта Application или метод Cells объекта Worksheet(в Excel).
Хотя стандартные операторы сравнения (<, <=, >, >=, о, =) не являются значимыми при использовании с объектами, VBA предоставляет один оператор сравнения, предназначенный исключительно для использования с объектными выражениями и переменными – оператор Is:
Objectl Is Object2
Object1 и Object2– любые допустимые объектные ссылки. Оператор Is используется для определения того, обозначают ли две объектные ссылки один и тот же объект. Результат операции сравнения Is равен True,если объектные ссылки являются одними и теми же, иначе – False.
Пример 6. Процедура создания резервной копии активной рабочей книги
Sub SaveActiveBook()
'Создает копию активной рабочей книги под новым именем,
'используя метод SaveCopyAs. Новое имя имеет добавку "_bp"
Dim FName As String 'имя файла-копии
Dim OldComment As String 'комментарии
'сохранить комментарии исходного файла
OldComment = ActiveWorkbook.Comments
'добавить новые комментарии к backup-файлу
ActiveWorkbook.Comments = "Резервная копия файла " & ActiveWorkbook.Name & ", выполненная процедурой SaveActiveBook"
'Сформировать новое имя файла из исходного
FName = Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) & "_bp.xls"
' добавление к имени файла пути
FName = ActiveWorkbook.Path & "\" & FName
ActiveWorkbook.SaveCopyAs Filename:=FName
ActiveWorkbook.Comments = OldComment ' восстановить комментарии
End Sub
В этой процедуре используются два объекта Excel, их свойства и методы. Объектная ссылка ActiveWorkbookявляется свойством Excel-объекта Application, которое возвращает объектную ссылку на активную в данный момент рабочую книгу.
В строке OldComment =… копируется строка свойства Commentsобъекта ActiveWorkbook в переменную OldComment. Затем в строках ActiveWorkbook.Comments = … задается новое значение для свойства Commentsобъекта ActiveWorkbook(это свойство изменяется и для исходной рабочей книги). Свойство Commentsэтого объекта содержит текст комментария, обычно вводимого диалоговое Properties(Окно свойств), которое Excel отображает при сохранении рабочей книги в первый раз или при использовании команды File | Properties(Файл | Свойства).