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

на главную

Жанры

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

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

Шрифт:

Идентификация объекта для использования

Вы должны сообщить VBA, какой именно объект нужен. Для этого используется объектное выражение- VBA-выражение специального вида, которым однозначно определяется конкретный объект для использования. То остающееся за кулисами значение, которое VBA вычисляет на основе объектного выражения, является ссылкой на объект (вы можете представлять себе такое значение как почтовый адрес, по которому проживает объект).

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

построенное объектное выражение. С этого момента в программном коде можно ссылаться на объект просто по имени переменной.

Понимание объектных выражений

Объектное выражение представляет собой фрагмент программного кода – выражение, "указывающее" на конкретный объект. С помощью правильно построенного объектного выражения можно изменять свойства объекта, вызывать его методы или присвоить объект переменной.

Обсуждаемые здесь приемы исключительно важны для практического программирования с использованием VBA, хотя сразу понять их не очень просто. Из-за того что в программе могут использоваться много объектов одновременно, полное объектное выражение должно включать все объекты, содержащие нужный вам объект. Попробую пояснить это следующим образом. Предположим, вас просят отправиться и найти "того парня". Вы сразу же спросите: "Какого еще того?"' А вот если бы вас попросили найти самого старшего школьника, живущего в доме №3 по улице Цветочной в городе Шепетовка, Украина, то вам не пришлось бы задавать такой вопрос. (Правда. вы бы тогда, наверное, спросили "Зачем?'") Конечно, если вы уже находитесь в доме №3 по улице Цветочной, и в том доме живет только один школьник, то команда типа "покормить мальчишку" будет вполне адекватной. Точно так же, когда контекст ясен, и VBA не требует полного списка объектов.

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

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

Например, рассмотрим следующее выражение, идентифицирующее конкретный объект в документе Word;

ThisDocument.Sections(2).Range

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

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

Объект Application содержит объект Documents - коллекция, представляющая все открытые документы. Если вам нужно работать с конкретным документом, необходимо идентифицировать его среди членов этого объекта-коллекции Documents. Например.

Documents(5) представляет объект Document № 5 в коллекции Documents.

В примере объектного выражения вы, однако, видите ключевое слово ThisDocument. Во многих VBA-приложениях ThisDocument используется для обозначения объекта Document, ассоциированного с вашим проектом.

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

конкретную коллекцию Sections, принадлежащую объекту ThisDocument. Идентифицировав объект Sections, вы получаете возможность выбрать конкретный член этой коллекции. Таким образом, Sections (2 ) ссылается на второй раздел документа.

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

Использование выражения, подобным образом прокладывающего путь к конкретному объекту сквозь дебри иерархии объектов, в профессиональной фразеологии VBA называется "получением объекта".

В рассмотренном выше примере объектного выражения

ThisDocument.Sections(2).Range

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

Определенные в VBA-приложениях коллекции обычно содержат объекты одного типа. Например, коллекции Sections в Word содержат только объекты Section, а коллекции Pages в Visio могут принадлежать только объекты Page. (Правда, VBA предлагает и родовой объект Collection, в котором вы можете разместить объекты любых типов. О том, как создавать и использовать свои собственные коллекции такого рода, говорится в главе 13.)

О коллекциях вам достаточно знать только то, как получить доступ к содержащимся в них конкретным объектам. Для этого у вас есть две возможности.

* Сослаться на объект по его месту или номеру индекса в коллекции. Именно это и сделано в рассмотренном выше примере объектного выражения - (2 ) задает ссылку на второй объект Section в коллекции Sections.

* Сослаться на объект по имени. Многие объекты имеют имена. Если вам известно имя объекта, который необходимо использовать, то вместо номера в объектном выражении можно указать имя. Например, в Visio объекты Page могут иметь имена, поэтому вполне допустим следующий пример:

ThisDocument.Pages ("Моя любимая страница")

Никто не любит вводить длинные и сложные объектные выражения, даже если они достаточно понятны, как выражение ThisDocument.Sections(2).Range.

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

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

Процесс создание объектной переменной можно разбить на два этапа.

1. Создание переменной, которая будет использоваться для хранения ссылки на объект.

2. Присваивание переменной ссылки на объект, с которым в дальнейшем необходимо будет работать.

Подробно каждый из этих этапов обсуждается в следующих двух разделах.

Объектные переменные объявляются точно так же, как переменные любого другого типа.

Стандартным при этом является использование оператора Dim (но точно так же, как и с переменными других типов, вы можете использовать в объявлении ключевые слова Public.Private или Static вместо Dim). Вот два примера объявления объектных переменных:

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

Огненный князь 2

Машуков Тимур
2. Багряный восход
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Огненный князь 2

Аномальный наследник. Том 1 и Том 2

Тарс Элиан
1. Аномальный наследник
Фантастика:
боевая фантастика
альтернативная история
8.50
рейтинг книги
Аномальный наследник. Том 1 и Том 2

Законы Рода. Том 5

Flow Ascold
5. Граф Берестьев
Фантастика:
юмористическое фэнтези
аниме
5.00
рейтинг книги
Законы Рода. Том 5

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Курсант: Назад в СССР 7

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

Последняя Арена 7

Греков Сергей
7. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 7

Александр Агренев. Трилогия

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

Архил...? Книга 2

Кожевников Павел
2. Архил...?
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Архил...? Книга 2

Эфир. Терра 13. #2

Скабер Артемий
2. Совет Видящих
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Эфир. Терра 13. #2

Решала

Иванов Дмитрий
10. Девяностые
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Решала

Черный маг императора 2

Герда Александр
2. Черный маг императора
Фантастика:
юмористическая фантастика
попаданцы
аниме
6.00
рейтинг книги
Черный маг императора 2

Темный Лекарь 5

Токсик Саша
5. Темный Лекарь
Фантастика:
фэнтези
аниме
5.00
рейтинг книги
Темный Лекарь 5

Не грози Дубровскому! Том Х

Панарин Антон
10. РОС: Не грози Дубровскому!
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Не грози Дубровскому! Том Х

Мастер Разума III

Кронос Александр
3. Мастер Разума
Фантастика:
героическая фантастика
попаданцы
аниме
5.25
рейтинг книги
Мастер Разума III