Опубликован: 13.09.2006 | Уровень: для всех | Доступ: свободно | ВУЗ: Тверской государственный университет
Лекция 4:

Объекты программного проекта. Программирование на лету

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Объект VBProject и коллекция VBProjects

В Office 2000 возможности работы с программными проектами документов существенно расширились. У объекта VBProject и коллекции VBProjects в Office 2000 появилось большое число новых свойств и методов. Замечу, что определенную сложность в изучение этого материала вносит то обстоятельство, что в справочной системе справки по многим объектам, связанным с проектами, отсутствуют или, что еще хуже, содержат неполные сведения, не отражающие действительной картины. Так было и в Office 97, такая же ситуация имеет место и в Office 2000.

Скажем несколько слов о коллекции VBProjects. В Office 97 у этой коллекции имелись три простых свойства Count, Parent, VBE и единственный метод - Item. У нее не было методов Add и Delete, так как проекты были прочно связаны со своими документами и удалялись и появлялись одновременно со своими документами. В Office 2000 у этой коллеции появились три метода для добавления проектов в коллекцию Add, AddFromFile, AddFromTemplate, соответственно появился и метод Remove для удаления элементов коллекции. Помимо этого, коллекция имеет методы SaveAs и FileName для сохранения проектов, появились также и новые свойства, в частности свойство StartProject.

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

Имея коллекцию VBProjects, добраться до отдельного проекта нетрудно, делается это обычным для коллекций способом, Можно, конечно, использовать метод Item, но, проще всего, указать индекс элемента в коллекции, при этом роль индекса может играть и имя проекта. Так что спуститься по иерархии сверху вниз нетрудно: VBE.VBProjects(1) дает ссылку на первый проект коллекции. Также просто и от отдельного проекта перейти вверх по иерархии. Объект VBProject имеет свойство Collection, позволяющее получить коллекцию VBProjects, а его свойство VBE позволяет подняться еще выше по иерархии и добраться до корневого объекта VBE; от корня можно уже спуститься в любую заданную точку. Итак, разобрав, как связан объект VBProject с объектами, вышестоящими в иерархии, давайте более подробно остановимся на его свойствах и методах.

В Office 97 объект класса VBProject имел только свойства и не имел методов. О двух свойствах этого объекта Collection и VBE я уже упомянул, они позволяют подняться по иерархии. Свойства Description и Protection позволяют получить описание проекта и определить, защищен ли он. Свойства HelpFile и HelpContextId позволяют указать справочную систему по проекту, если таковая существует. Наиболее важными, пожалуй, свойствами являются свойства VBComponents и References. Свойство VBComponents возвращает коллекцию компонент проекта: модули, классы и формы, входящие в проект. Имея эту коллекцию, можно перейти к соответствующей компоненте и программно работать с ней. Свойство References позволяет получить доступ к коллекции ссылок на элементы, доступные из данного проекта. Элементы этой коллекции соответствуют ссылкам, отображаемым в пункте References меню Tools в среде редактора VB.

В Office 2000 объект VBProject получил несколько новых свойств, например, свойства: CompatibleOleServer, IsDirty, Type. Первое из них возвращает или устанавливает строку, содержащую совместимый сервер Автоматизации для проекта. Булево свойство IsDirty, как обычно для свойства с таким именем указывает на внесение изменений в проект с момента последнего его сохранения. Свойство Type задает тип проекта, указывающий на то, что проект может относиться, например, к ActiveXDLL или ActiveXControl. Объект VBProject теперь имеет и методы. Метод MakeCompiledFile записывает проект в виде библиотеки DLL, имя которой задается новым свойством BuildFileName. Метод SaveAs позволяет сохранить проект в указанном месте.

Изменения в составе свойств и методов объектов VBProject и VBProjects симптоматичны. Они отражают тенденцию к возрастанию потребностей офисных программистов при работе с программными проектами документов.

Анализ свойств проекта

Перейдем теперь к рассмотрению примеров работы с объектом VBProject. Начнем с анализа терминальных свойств проектов:

Public Sub WorkWithProjects()
	'Анализ терминальных свойств проектов коллекции	VBProjects
	'Dim MyProject As VBProject
	 Dim MyProject As Object
	'Dim MyAddIn As AddIn
	 Dim MyAddIn As Object
		'Анализ свойств проектов
		Debug.Print "Число проектов в коллекции - ", VBE.VBProjects.Count
		For Each MyProject In VBE.VBProjects
		With MyProject
			Debug.Print "Имя Файла - ", .FileName
			Debug.Print "Имя проекта", .Name
			Debug.Print "Тип проекта", .Type
			Debug.Print "Описание проекта", .Description
			Debug.Print "Статус защиты", .Protection
			Debug.Print "Статус проекта", .Mode
			'Debug.Print "Изменения Вносились? ", .IsDirty
			Debug.Print "Имя Dll", .BuildFileName
			'Debug.Print "Начальный статус", .StartMode
		 End With
	Next MyProject
	' Анализ коллекции AddIns
	Debug.Print "Число AddIn в коллекции = ", VBE.AddIns.Count
	For Each MyAddIn In VBE.AddIns
		Debug.Print "GUID AddIn = ", MyAddIn.GUID
		Debug.Print "Описание AddIn - ", MyAddIn.Description
	Next MyAddIn
End Sub
Листинг 4.1.

Сама программа достаточно понятна. В ее первой части я в отладочном режиме печатаю число открытых проектов и в цикле по коллекции VBProjects для каждого из проектов печатаю значения его основных терминальных свойств. Обратите внимание на два обстоятельства. В двух первых строчках программы дважды описана переменная MyProject один раз как VBProject, другой - как Object. Это не случайно. Когда я пишу текст программы, я пользуюсь первым из этих объявлений, задавая раннее связывание. Тогда я получаю нужные мне подсказки о свойствах и методах этого объекта и вложенных в него объектов. Без этих подсказок жизнь программиста осложняется. Когда же я перехожу на выполнение программы, то приходится пользоваться вторым вариантом объявления, поскольку из-за недоработки в Office 2000 нормальная работа с этим объектом в документах Word невозможна, хотя в Excel работают и явные объявления типа VBProject. Заметьте также, что обращение к некоторым свойствам закомментированы. Это связано с тем, что не все заявленные новые свойства и методы реально работают в Office 2000. Следует отметить еще один небольшой, но досадный "жучок", проявляющийся в этом месте. При появлении подсказки ряд существующих свойств и методов не показывается, хотя они фактически работают, например, не показывается свойство Protection и Mode.

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

Во второй части этой процедуры приводятся некоторые свойства коллекции AddIns - GUID и описание каждого элемента.

Есть смысл привести результаты тестовой печати при работе этой процедуры. Я выполнял ее в тот момент, когда были открыты два документа Word, один из них текст этой лекции, второй тестовый документ, содержащий тексты выполняемых процедур. Вот результаты печати:

Число проектов в коллекции -				3 
Имя Файла -	E:\O2000\DS2000\Ch8\Ch8.doc
Имя проекта	Project
Тип проекта	100 
Описание проекта			
Статус защиты	0 
Статус проекта				0 
Имя Dll	- E:\O2000\DS2000\Ch8\Ch8.DLL
Имя Файла -	E:\O2000\Book2\Ch1\Normal
Имя проекта	Normal
Тип проекта	100 
Описание проекта			
Статус защиты	0 
Статус проекта				0 
Имя Dll	- E:\O2000\Book2\Ch1\Normal.DLL
Имя Файла -	E:\O2000\Book2\CD\Ch1\DocOne.doc
Имя проекта	DocOneProject
Тип проекта	100 
Описание проекта - Этот проект содержит примеры главы 2
Статус защиты	0 
Статус проекта				0 
Имя Dll	- ProjectDll

Число AddIn в коллекции =	8 
GUID AddIn =	{7A588DE1-D5FF-11D2-A1F8-00A0C9A70018}
Описание AddIn -			Use the VBA String Editor to quickly and accurately build strings for SQL statements or long scripts to embed in VBA code.
GUID AddIn =	{6961B1FB-3ECD-11D2-B81C-0060089A6839}
Описание AddIn -			Use the Package and Deployment Wizard to package applications for installation and deployment.
GUID AddIn =	{0D87BB44-D5FF-11D2-A1F8-00A0C9A70018}
Описание AddIn -			Use the Error Handler Add-in to automate creating standardized error handler code with input dialogs that capture basic information and insert standardized error handling code using a customizable template.
GUID AddIn =	{0D87BB42-D5FF-11D2-A1F8-00A0C9A70018}
Описание AddIn -			Use the Code Commenter Add-in to create well-commented code by automatically adding comments and headers to procedures using customizable templates.
GUID AddIn =	{0D87BADE-D5FF-11D2-A1F8-00A0C9A70018}
Описание AddIn -			Use the Multi-Code Import/Export Add-in to import or export multiple objects in a single operation.
GUID AddIn =	{0D87BB14-D5FF-11D2-A1F8-00A0C9A70018}
Описание AddIn -			Use the WinAPI Viewer utility to view and copy Win32 API Constants, Declares, and Types.
GUID AddIn =	{0D87BAE8-D5FF-11D2-A1F8-00A0C9A70018}
Описание AddIn -			Use the VBA Source Code Control Add-in to take advantage of the Microsoft Visual SourceSafe source code control tool from within the Visual Basic for Applications 6.0 IDE.
GUID AddIn =	{31E27D66-596E-11D2-B826-0060089A6839}
Описание AddIn -			Use the Code Librarian to reuse and share code in a centralized database.
Листинг 4.2.

Как и положено, при двух открытых документах коллекция VBProjects содержит три проекта. Проекту моего тестового документа в свое время я дал имя (DocOneProject) и указал для него описание. О коллекции AddIns я уже говорил, но, возможно, Вам будет интересно взглянуть на их полное описание.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >
Андрей Гуменюк
Андрей Гуменюк
Молдова