Документы и проекты с объектной точки зрения
Объект Document имеет свойство VBProject, возвращающее объект, задающий программный проект данного документа. С другой стороны, объект VBProject является элементом коллекции VBProjects, содержащей проекты всех открытых документов. Коллекция VBProjects, в свою очередь, вложена в объект VBE. Поэтому давайте поднимемся на несколько этажей выше проекта. Я напомню, что корневым объектом, содержащим все объекты VBA, является объект VBE (Visual Basic Environment или Editor). У этого объекта есть только свойства, позволяющие получить доступ к объектам VBA, лежащим на нижних уровнях иерархии. В справочной системе приведена следующая объектная модель VBE:
Рис. 4.1. Модель объекта VBE
Эта модель далеко не полная. Она отражает только коллекции, входящие на верхнем уровне в объект VBE. Рассмотрим коротко эти коллекции:
- Конечно, основной является коллекция проектов - VBProjects. Эту коллекцию составляют все проекты открытых документов приложения. Заметьте, если одновременно открыто N документов Word, то коллекция VBProjects будет содержать не менее чем N+1 элемент, по одному проекту на документ плюс общий для всех проект Normal. Заметьте также, проекты разных приложений, например, Excel и Word входят, к сожалению, в разные коллекции, что затрудняет программную работу в проекте документа Word с проектом Excel. Совместная работа с разными проектами внутри одного приложения не вызывает особых трудностей. Достаточно просто иметь общие переменные, вызывать общие процедуры.
- О том, как создать собственные надстройки - AddIn, разговор пойдет в последующих лекциях. Сейчас же замечу, что коллекция надстроек, доступных в приложении Word 2000, не пуста. В настоящий момент у меня на компьютере доступны восемь таких надстроек, среди них WinApiViewer, AddIn для построения строк, задающих SQL-операторы, AddIn, реализующий множественный импорт- экспорт объектов за одну операцию и другие.
- Коллекция окон Windows содержит объекты, задающие окна в Редакторе Visual Basic. Восемь окон входит в эту коллекцию, - окно проекта и окно кода, окно отладки, окно локальных переменных и другие.
- Коллекция CodePanes содержит подокна, задающие активные окна кода, обычно таких открытых окон в процессе работы одно, но может быть и несколько ведется параллельная отладка нескольких проектов.
- Коллекция CommandBars содержит, как правило, несколько десятков элементов, задающих инструментальные панели в среде Редактора VBA.
Объект Document имеет свойство VBProject, возвращающее объект, задающий программный проект данного документа. С другой стороны, объект VBProject является элементом коллекции VBProjects, содержащей проекты всех открытых документов. Коллекция VBProjects, в свою очередь, вложена в объект VBE. Поэтому давайте поднимемся на несколько этажей выше проекта. Я напомню, что корневым объектом, содержащим все объекты VBA, является объект VBE (Visual Basic Environment или Editor). У этого объекта есть только свойства, позволяющие получить доступ к объектам VBA, лежащим на нижних уровнях иерархии. В справочной системе приведена следующая объектная модель VBE:
Рис. 4.1. Модель объекта VBE
Эта модель далеко не полная. Она отражает только коллекции, входящие на верхнем уровне в объект VBE. Рассмотрим коротко эти коллекции:
- Конечно, основной является коллекция проектов - VBProjects. Эту коллекцию составляют все проекты открытых документов приложения. Заметьте, если одновременно открыто N документов Word, то коллекция VBProjects будет содержать не менее чем N+1 элемент, по одному проекту на документ плюс общий для всех проект Normal. Заметьте также, проекты разных приложений, например, Excel и Word входят, к сожалению, в разные коллекции, что затрудняет программную работу в проекте документа Word с проектом Excel. Совместная работа с разными проектами внутри одного приложения не вызывает особых трудностей. Достаточно просто иметь общие переменные, вызывать общие процедуры.
- О том, как создать собственные надстройки - AddIn, разговор пойдет в последующих лекциях. Сейчас же замечу, что коллекция надстроек, доступных в приложении Word 2000, не пуста. В настоящий момент у меня на компьютере доступны восемь таких надстроек, среди них WinApiViewer, AddIn для построения строк, задающих SQL-операторы, AddIn, реализующий множественный импорт- экспорт объектов за одну операцию и другие.
- Коллекция окон Windows содержит объекты, задающие окна в Редакторе Visual Basic. Восемь окон входит в эту коллекцию, - окно проекта и окно кода, окно отладки, окно локальных переменных и другие.
- Коллекция CodePanes содержит подокна, задающие активные окна кода, обычно таких открытых окон в процессе работы одно, но может быть и несколько ведется параллельная отладка нескольких проектов.
- Коллекция CommandBars содержит, как правило, несколько десятков элементов, задающих инструментальные панели в среде Редактора VBA.
Помимо пяти коллекций в объект VBE вложено большое число других объектов, не являющихся коллекциями. Отмечу среди них лишь некоторые объекты.
Объект Events напоминает коллекцию. Каждое из его свойств возвращает объект, тип которого совпадает с именем свойства. Возвращаемые объекты обладают определенным набором событий, которые могут быть подключены в создаваемых надстройках Addins, позволяя реагировать на те или иные действия. Большинство событий связано с добавлением, удалением, переименованием объектов в коллекциях. Так свойство ReferencesEvents объекта Events возвращает объект ReferencesEvents, обладающий двумя событиями - ItemAdded, ItemRemoved, возникающими при добавлении или удалении ссылок - элементов коллекции References.
Три Active-свойства объекта VBE возвращают соответствующие активные объекты - ActiveVBProject, ActiveWindow, ActiveCodePane. Похожим является свойство SelectedVBComponent, возвращающее выбранную компоненту проекта
Помимо пяти коллекций в объект VBE вложено большое число других объектов, не являющихся коллекциями. Отмечу среди них лишь некоторые объекты.
Объект Events напоминает коллекцию. Каждое из его свойств возвращает объект, тип которого совпадает с именем свойства. Возвращаемые объекты обладают определенным набором событий, которые могут быть подключены в создаваемых надстройках Addins, позволяя реагировать на те или иные действия. Большинство событий связано с добавлением, удалением, переименованием объектов в коллекциях. Так свойство ReferencesEvents объекта Events возвращает объект ReferencesEvents, обладающий двумя событиями - ItemAdded, ItemRemoved, возникающими при добавлении или удалении ссылок - элементов коллекции References.
Три Active-свойства объекта VBE возвращают соответствующие активные объекты - ActiveVBProject, ActiveWindow, ActiveCodePane. Похожим является свойство SelectedVBComponent, возвращающее выбранную компоненту проекта