VBA для чайников
Шрифт:
Dim objМойМалыш As Glide
Set objМойМалыш = ActivePresentation. Slides .Add 1, _
ppLayoutTextAndClipart
В иных случаях для создания объектов используются другие приемы. Вот несколько вариантов на выбор.
* Создание новой копии объекта, уже существующего в проекте.
* Использование объекта из другого приложения или компонента ActiveX (COM).
* Создание экземпляра объекта на основе класса, созданного вами в модуле класса.
В
Раз уж вы собираетесь использовать переменные для хранения ссылок на объекты, наступит время, когда вы захотите выяснить, ссылается ли данная переменная на тот же объект, что и другая переменная или объектное выражение.
Проверить идентичность двух ссылок на объекты можно с помощью оператора Is. Значением соответствующего выражения будет True, если ссылки идентичны, и False, если ссылки указывают на разные объекты. Вот фрагмент программного кода, иллюстрирующий использование оператора Is:
Dim objObject l As Object, objOb]ect2 As Object
If objObjectl Is objObject2 Then
MsgBox "Это тот же самый объект!"
Else
MsgBox "Это разные объекты."
End If
С помощью оператора Is можно сравнить объектную переменную и с объектным выражением, например, так:
If objObiect3 Is ThisDocument.Pages(2).Shapes(3) Then
Обратите внимание, оператор Is (как и любой другой оператор) нельзя использовать для выяснения идентичности содержимого двух объектов.
Эффективная работа с объектами в программе
Для упрощения работы с объектами в программе в VBA можно использовать две многострочные программные конструкции, называемые операторами With и Each . . .Next.
Использование оператора With
И когда для ссылки на объект используется мнемоническая переменная с коротким именем, и когда используется вполне инструктивное объектное выражение, их приходится вводить снова и снова. Но, оказывается, даже этого можно избежать.
Если в программе один и тот же объект используется в нескольких идущих один за другим операторах, то оператор With позволяет указать объект только один раз. Это не только избавит вас от необходимости печатать имя объекта для каждого из операторов, но и делает программный код более понятным, а его выполнение более быстрым. Например:
With objПолнаяОбъективность
.Name = "Опрос общественного мнения" ' установка
.DisplayName ' вызов метода DisplayName
sngРегион = .Area ' выяснение значения свойства Area
intПодтасовка = .Rotate(60) ' вызов метода Rotate (Поворот)
' и сохранение возвращаемого им значения в переменной
End With
Как видите, конструкция With. . .End With может включать операторы, в которых читаются и устанавливаются свойства, вызываются методы. Обратите внимание на то, что данная конструкция не задает цикл - входящие в нее операторы выполняются только один раз.
Конструкции, использующие With, можно вкладывать одну в другую. Это удобно, когда нужно выполнить ряд действий и по отношению к некоторому объекту, и по отношению к одному из содержащихся в нем объектов. Пример предоставляет следующий фрагмент программного кода. В нем выполняются самые различные действия с объектом Block в AutoCAD. Во вложенной структуре With обрабатывается один из графических объектов, содержащихся в объекте Block.
Разобраться в деталях вам помогут комментарии.
With Block.Item("Монстр")
' Объект Block с именем "Монстр" делает следующее:
' переименовывает Block с помощью свойства Name
.Name = "Душечка"
' Выясняет число объектов в нем, с помощью свойства Count
intЧислоОбъектов = .Count
' Вызывает метод AddCircle
' для центра = 0 и для радиуса = 5
AddCircle (0#, 5#)
With.Item (1)
' эта вложенная структура With ссылается на первый
' графический объект в объекте Block
' графический объект перемещается с помощью метода Move
.Move (15, 20)
' изменяется свойство Color этого графического объекта
.Color = 221
End With
End With
Данный пример не иллюстрирует, что вы можете использовать значения, возвращаемые свойствами или методами объекта, в условных операторах и других выражениях. Например, во внешнюю структуру With можно было бы добавить следующий фрагмент программного кода:
IntНовыйЦвет = InputBox (" Введите число, задающее " _
& "цвет первого объекта в блоке " & .Name)
If .Count > 12000
MsgBox "Да этот блок просто гигант!"
End If
Вообще-то, управляющем структурам VBA (группам операторов, предназначенных для управления потоком выполнения программы) посвящена глава 8, но одну из таких структур мы рассмотрим здесь, потому что она используется только с объектами. Как аналог идеи цикла For. .Loop, в VBA структура For Each. . .Next представляет множество операторов, относящихся ко всем объектам в некоторой коллекции. Правда, хотя обе структуры выглядят очень похоже, между ними есть существенные различия по сути, и For