Чтение онлайн

на главную

Жанры

VBA для чайников

Каммингс Стив

Шрифт:

Dim objВеликийОбъект As Object ' типичный объект

Dim objShapeObject As Shape ' объект Shape

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

переменная. VBA не позволит поместить в такую переменную объекты иных классов.

Эти два типа объявлений объектов имеют специальные названия: поздняя привязка, когда конкретный класс не указывается, и ранняя привязка, когда переменной сразу же назначается определенный класс объектов.

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

* Уменьшается вероятность появления ошибок. Как уже упоминалось, в этом случае VBA не позволит присвоить переменной объект неправильного типа. Кроме класса объекта, компилятор проверит также и остальную часть программного кода, чтобы убедиться в том, что вы везде используете только методы и свойства, допустимые для объектов данного класса. При поздней привязке компилятор не смог бы выполнить такую проверку, и попытка использования недопустимого свойства или метода обнаружилась бы только во время выполнения программы.

* Ускоряется выполнение программы. Поскольку компилятор может определить, имеет ли объект те методы и свойства, которые вызываются в программе, самой программе не придется тратить время на проверку этого во время ее выполнения.

* Упрощается программный код. Чтобы выяснить, для какого класса объектов предназначена данная переменная, вам нужно просто взглянуть на строку с ее объявлением.

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

* Когда одну и ту же переменную предполагается использовать для объектов различных классов. Это оправданно, когда разным классам присуши одинаковые методы или свойства, используемые в программе. Имея подобную переменную, вам не придется переписывать программный код несколько раз, чтобы делать одно и то же с разными объектами.

* Когда объекты вызываются из других приложений и поэтому их нельзя объявить с помощью ранней привязки. Использование объектов из других приложений относится г к углубленным вопросам VBA-программирования (краткое обсуждение которых вы найдете в главах 10 и 19), но вам не мешает знать о таком потенциальном ограничении.

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

После того как объектная переменная объявлена, перед ее использованием необходимо поместить в нее ссылку на объект. Это делается путем присваивания этой переменной объектного выражения с помощью ключевого слова Set. Например:

Set objShapeObject = ThisDocurcent.Pages(1).Shapes(4)

Обратите внимание, что синтаксис в данном случае немного

отличается от того, каким вы присваивали данные обычным переменным (см. главу 9). Точно так же, как в случае данных других типов, между именем переменной и приписываемым ей объектом помещается знак равенства. Единственное отличие в том, что здесь оператор должен начинаться с ключевого слова Set.

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

Сделать это совсем просто. С помощью оператора Set присвойте переменной ключевое слово Nothing, как в следующем примере:

Set objPriceIsNoObject = Nothing

Если объект, с которым вы собираетесь работать, еще не существует, вам придется его создать. В простых VBA-программах для этого используется метод Add, предназначенный для создания объектов, встроенных в ваше VBA-приложение, т.е. в приложение, с которым ассоциируется ваш проект. (В некоторых приложениях, возможно, именем такого метода будет что-то типа AddShape или AddDocument - проверьте в справочной системе приложения, чтобы знать точно.)

Самое главное - выяснить, метод Add какого именно из объектов следует применить. Цель - найти объект, который должен служить контейнером для создаваемого объекта. Обычно (но не всегда) подходящий контейнер представляет собой коллекцию.

Например, предположим, что нужно создать новый объект Layer в Visio. Объект Layer соответствует слою изображений в Visio. т.е. группе графических элементов, с которыми можно работать одновременно. Каждый объект Layer принадлежит объекту Layers, представляющему коллекцию из (одного или нескольких) слоев изображений. Исходя из лих соображений, для создания нового слоя вы должны выбрать метод Layers . Add.

Конечно, необходимо идентифицировать тот конкретный объект Layers, в котором

VBA придется создать ваш новый объект Layer. Коллекция Layers принадлежит конкретному объекту Page в объекте Document. Поэтому полностью оператор для создания нового объекта Laye r должен выглядеть примерно так:

ThisDocument.Pages(2).Layers.Add ( "Новый слой")

Объект Layer тоже имеет метод Add, но его нельзя использовать для создания подобного нового слоя. Метод Add объекта Layer добавляет объект Layer в данный слой, а не создает еще один такой же Layer.

Точно так же, если нужно добавить новый слайд в презентации PowerPoint, понадобится примерно такой оператор:

АсtivePresentation.Slides.Add1.ppLayoutTextAndClipart

Как видите, новый слайд тоже добавляется в подходящий объект-контейнер - коллекция Slides.

Ввод длинных ссылок на объекты не приносит слишком много радости, а именно такие ссылки содержат операторы, использующие метод Add, - поэтому имеет смысл при создании объекта сразу же создать и переменную для этого нового объекта. Тогда в следующий раз вместо длинной ссылки на объект в программном коле можно использовать имя переменной. Вот пример использования такого подхода:

Поделиться:
Популярные книги

Отмороженный 7.0

Гарцевич Евгений Александрович
7. Отмороженный
Фантастика:
рпг
аниме
5.00
рейтинг книги
Отмороженный 7.0

Довлатов. Сонный лекарь

Голд Джон
1. Не вывожу
Фантастика:
альтернативная история
аниме
5.00
рейтинг книги
Довлатов. Сонный лекарь

Измена

Рей Полина
Любовные романы:
современные любовные романы
5.38
рейтинг книги
Измена

Идеальный мир для Лекаря 4

Сапфир Олег
4. Лекарь
Фантастика:
фэнтези
юмористическая фантастика
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 4

Развод и девичья фамилия

Зика Натаэль
Любовные романы:
современные любовные романы
5.25
рейтинг книги
Развод и девичья фамилия

Сила рода. Том 1 и Том 2

Вяч Павел
1. Претендент
Фантастика:
фэнтези
рпг
попаданцы
5.85
рейтинг книги
Сила рода. Том 1 и Том 2

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Тринадцатый II

NikL
2. Видящий смерть
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Тринадцатый II

Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Вудворт Франциска
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Замуж второй раз, или Ещё посмотрим, кто из нас попал!

Бестужев. Служба Государевой Безопасности

Измайлов Сергей
1. Граф Бестужев
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Бестужев. Служба Государевой Безопасности

Седьмая жена короля

Шёпот Светлана
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Седьмая жена короля

Чужое наследие

Кораблев Родион
3. Другая сторона
Фантастика:
боевая фантастика
8.47
рейтинг книги
Чужое наследие

Начальник милиции 2

Дамиров Рафаэль
2. Начальник милиции
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начальник милиции 2

Оружейникъ

Кулаков Алексей Иванович
2. Александр Агренев
Фантастика:
альтернативная история
9.17
рейтинг книги
Оружейникъ