предназначены для упрощения работы с набором объектов, когда этот набор объектов нужно использовать как одно целое. Как правило, все объекты в коллекции имеют один и тот же тип. Например, коллекция Shapes в Visio состоит из объектов Shape, а коллекция Pages - из объектов Page.
Но есть и коллекции, которые оказываются более либеральными к типу входящих в них объектов. Например, VBA предлагает родовой объект Collection, предназначенный для хранения в нем объектов любых типов в любой комбинации. Если возникнет необходимость готовить самые невероятные смеси, то коллекции VBA окажутся как раз кстати.
Позже, в разделе "Работа с коллекциями объектов", мы с вами выясним, как получить доступ к отдельным объектам в коллекциях, а в главе 13 вы узнаете, как использовать свойства и методы самих коллекций (не забывайте, что они тоже являются объектами) и как создавать свои собственные коллекции на основе родового VBA-объекта Collection.
Что такое объектная модель
Как уже упоминалось, объекты VBA существуют в иерархической зависимости один от другого. Кроме обладания своими собственными свойствами, методами и событиями, объекты высших ступеней иерархии служат в качестве контейнеров для одного или целого множества подчиненных объектов. Эти вложенные объекты в свою очередь содержат другие объекты и т.д.
Вся система таких иерархических отношений конкретного VBA-приложения называется объектной моделью этого приложения. Часто представляемая в графическом виде, объектная модель приложения описывает вложения одних объектов в другие. Пример графического представления одной из объектных моделей показан на рис. 12.2.
Рис. 12.2. Объектная модель Visio с компакт-диска Visio 2000
Как видно из рис. 12.2, на вершине объектной модели VBA-приложения находится объект Application (приложение), являющийся контейнером для всех других объектов приложения, с которыми вы можете работать. Ваш VBA-проект тоже является объектом-контейнером, в котором размещаются все созданные вами модули программного кода и формы, равно как и документ проекта. (О структуре VBA-проекта и его компонентах говорилось в главе 7.)
Понимание важности объектной модели
Вам придется сообщать VBA о том, какой конкретный объект нужен вам для работы, поэтому хорошее понимание объектной модели VBA-приложения оказывается очень важным для эффективной работы в нем. С помощью диаграммы объектной модели приложения, подобной показанной на рис. 12.2, очень просто проследить всю цепочку объектов, которой принадлежит нужный вам объект. В данном случае, например, сразу видно, что объект Connect является членом коллекции Connects, принадлежащего объекту Master, который в свою очередь... .
Расширение объектной модели
В программах, созданных в VBA, совсем не обязательно ограничивать себя использованием объектов только одного VBA-приложения. Не обязательно даже ограничиваться использованием только VBA- приложений как таковых. Можно использовать вообще любые приложения и "компоненты", удовлетворяющие стандарту Component Object Model (COM) фирмы Microsoft (Component Object Model можно перевести как объектная модель компонента).
Стандарт СОМ представляет собой набор технических спецификаций, регламентирующих правила определения объектов в приложениях и других программных единицах, а также правила предоставления таких объектов для использования в других приложениях. Чтобы обозначить, что удовлетворяющим стандарт СОМ приложением можно управлять из другого приложения, используется специальный термин автоматизация. Кстати, стандарт СОМ относится не только к VBA или Visual Basic, он понятен многим другим средствам разработки приложений (например, компиляторам C++), которые таким образом могут использовать соответствующие объекты.
Стандарт СОМ открывает фантастические возможности для создания мощных VBA приложений, допускающих настройку пользователем. Теперь вы можете (я не сказал легко) создавать приложения, позволяющие одновременно обрабатывать информацию, полученную из диаграмм Visio, документов Word, рабочих листов Excel и т.п. Ваше приложение может отображать всю эту информацию в окнах, которые разработаны вами, но которые в то же
время используют специальные функциональные возможности отображения информации этих приложений-компонентов.
Разработка пользовательских приложений такого уровня, очевидно, относится к непростым задачам, поэтому в данной книге это будет обсуждаться весьма поверхностно (в главе 14). Но я должен по крайней мере упомянуть, что возможности VBA открывают путь к великим свершениям.
Формы в VBA – это тоже объекты
Формой называют любое созданное в VBA пользовательское окно. Если в вашей программе предусмотрен ее собственный пользовательский интерфейс, формами будут как главное окно программы, так и все другие диалоговые окна, отображаемые вашей программой (рис. 12.3).
Главное, здесь нужно понять, что формы VBA сами являются объектами, т.е. представляют собой сущности, содержащие как информацию (задающую, например, внешний вид формы на экране), так и набор средств для обработки этой информации. Официально формы в VBA описываются в терминах объекта User Form.
Рис. 12.3. Примеры форм VBA
Как и любые другие уважающие себя объекты в VBA, формы прекрасно вписываются в рамки парадигмы объектной модели. Каждый объект UserForm принадлежит одновременно двум коллекциям объектов - VBA-проекту, в котором хранится форма, и коллекции
UserForms, содержащей все формы, загружаемые программой. В свою очередь, объект UserForms служит контейнером для коллекции Controls, содержащей элементы управления, помещенные в форму.
Точно так же элементы управления в форме- кнопки, флажки, переключатели и всевозможные другие рычажки, которыми можно любоваться и играть, - тоже являются объектами.
Для каждого типа элементов управления в VBA предлагается объект соответствующего типа.
Техника, с помощью которой можно получить доступ к конкретной форме или помещенному в нее элементу управления и использовать свойства, методы и события этого объекта, ничем не отличается от техники, используемой с другими объектами, о которых говорится в этой главе. Подробнее о работе с формами и элементами управления (а значит, и соответствующими объектами) говорится в главах 10 и 19.