Лекции VBA. Можно выделить следующие разновидности макросов
Скачать 314.53 Kb.
|
Объектные переменныеВ дополнение к типам Byte, Integer, Long, Single, Double и String VBA также имеет тип Object. Переменные или выражения типа Object ссылаются на объект VBA или на объект, принадлежащий приложению, например Excel-объекты Workbook, Worksheet и Range. Как и в случае с другими типами VBA, можно объявлять переменные в модулях, процедурах и функциях с определенным типом Object, что показано в следующем операторе: Dim myObject As Object Можно задавать переменную myObject, создаваемую предшествующим оператором Dim, чтобы она содержала ссылку на любой объект VBA или объект приложения. Если вы собираетесь использовать переменную типа Object для некоторых специфических типов объектов, можно также объявлять объектную переменную для этого специфического типа объекта: Dim InstBook As Workbook Объектную переменную InstBook, создаваемую этим оператором Dim, можно использовать только для сохранения ссылок на объекты Workbook; при попытке присвоить переменной InstBook ссылку на объект Range или Worksheet VBA отображает сообщение об ошибке несовпадения типов. Аналогично, следующее предложение объявляет объектную переменную, которая может сохранять только объекты Document: Dim InstDoc As Document Объектное выражение (object expression) — это любое выражение VBA, которое определяет отдельный объект. Все объектные выражения должны вычисляться до единственной объектной ссылки {ссылки на объект); объектные выражения используются с единственной целью — создание ссылок на специфические объекты в ваших программах VBA. Объектное выражение может состоять из объектных переменных, объектных ссылок или объектного метода или свойства, которое возвращает объект. Нельзя использовать переменные типа Object или объектные выражения в арифметических, логических или операциях сравнения. Объектная ссылка, созданная с помощью объектного выражения или сохраненная в объектной переменной, в действительности, является только адресом, указывающим место в памяти компьютера, где сохранен объект, на который выполняется ссылка. Поскольку объектная ссылка — это адрес памяти, арифметические, логические операторы и операторы сравнения не имеют смысла. Перед использованием объектной переменной для ссылки на объект необходимо задать эту переменную, чтобы она содержала ссылку на нужный объект. Присваивание объектной ссылки объектной переменной отличается от присваиваний других переменных; чтобы присвоить объектную ссылку объектной переменной, используйте оператор Set. Оператор Set имеет следующий синтаксис: Set Переменная=Объект Переменная — это любая объектная переменная или переменная типа Variant. Объект — любая допустимая объектная ссылка; это может быть другая объектная переменная или объектное выражение. Если Переменная — переменная, объявленная с каким-либо определенным типом (например, Range или Workbook), этот тип должен быть совместим с объектом, на который ссылается Объект. Пример использования объектных переменных Dim InstSheet As Worksheet Set InstSheet = Application.ActiveSheet Чтобы задать отдельный объект в выражении или объектную переменную для ссылки на этот объект, используйте методы и свойства, возвращающие объекты, такие как свойства ActiveWorkbook и ActiveSheet объекта Application или метод Cells объекта Worksheet (в Excel). Аналогичные принципы применимы в Word: используйте свойство ActiveDocument объекта Application для получения ссылки на текущий документ и так далее. Ссылка на объекты с помощью With...End WithПри написании кода программы можно встретить ссылку на один и тот же объект в нескольких операторах. VBA предоставляет особую структуру — структуру With...End With, позволяющую ссылаться.на свойства или методы, которые принадлежат одному и тому же объекту, без задания всей объектной ссылки каждый раз. Структура With...End With имеет следующий синтаксис: With Object ' операторы, использующие свойства и методы Object End With Object — это любая допустимая объектная ссылка. Пример использования структуры With...End With. Dim FName As String 'имя файла-копии With ActiveWorkbook ' Сформировать новое имя файла из исходного FName - Left(.Name, InStr(.Name, ".") - 1) & "_bp2.xls" FName = .Path & "\" & FName .SaveCopyAs Filename:=FName End With End Sub Сравните этот же код без использования структуры With...End With Dim FName As String ' имя файла-копии ' Сформировать новое имя файла из исходного FName = Left(ActiveWorkbook.Name, InStr(ActiveWorkbook.Name, ".") - 1) _ & "_bp.xls" FName = ActiveWorkbook.Path & "\" & FName 22 ActiveWorkbook.SaveCopyAs Filename:=FName End Sub |