Office 2000 это не просто совокупность отдельных приложений, - приложения Office 2000 тесно интегрированы между собой и имеют много общего - интерфейс, схожее поведение в различных ситуациях, единую среду Редакторов VBA и VBScript, возможность взаимодействия. За счет чего же достигается эта общность, как технологически выдерживается общая линия развития различных приложений? Достичь этого во многом удается за счет того, что Office построен по принципам объектно-ориентированного программирования (ООП), основан на COM-технологии и представляет множество объектов, объединенных в библиотеки. Совокупность этих библиотек составляет, как уже говорилось, каркас документов. При создании каждого нового документа Office 2000 автоматически строится каркас документа по умолчанию.
В зависимости от вида документа в его каркас включаются те или иные библиотеки из всей совокупности библиотек, а, следовательно, подключаются и объекты этих библиотек. Некоторые из этих библиотек содержат объекты, общие для всех приложений Office 2000, и включаются в каркасы всех документов. Благодаря этому, все приложения независимо от их типа будут иметь общие функции и во многом одинаково выглядеть в тех ситуациях, когда действия и внешний вид определяются методами и свойствами объектов этих библиотек. Общность (общие объекты) - это одна из главных, но не единственная причина, обуславливающая близость приложений Office 2000 и облегчающая работу в этой интегрированной среде. Другая причина - Схожесть (схожие объекты) - состоит в том, что многие объекты, принадлежащие специализированным библиотекам, имеют эквивалентные или весьма близкие свойства, методы и события. Объекты не являются совпадающими, но во многом их свойства и поведение может быть схожим.
Таким образом, в среде Office 2000 программист в своей работе часто сталкивается с общими и схожими объектами. Общими объектами являются, например, объекты класса CommandBar, FileSearch, новые объекты OWC - Office Web Components, введенные в Office 2000, и многие другие объекты. Не менее важную роль играют и схожие объекты, такие, у которых частично совпадают свойства, события и методы. В качестве примеров схожих объектов можно привести коллекции, большинство из которых имеют методы Add и Remove (Delete) для добавления и удаления элементов Range и Selection, представляющие, конечно же, разные объекты в приложениях Word и Excel, но, тем не менее, имеющие много схожего в их поведении. Microsoft использует оба способа достижения общности. Так, с одной стороны, в Office 2000 добавлены общие объекты OWC, с другой стороны, публикация документов Office 2000 на Web-страницах достигается за счет того, что добавлено
общее поведение к схожим объектам, задающим документы Office 2000 (Document в приложении Word,
Начнем наше подробное обсуждение общности и схожести с рассмотрения основных библиотек, содержащих общие объекты:
проекты приложений Office 2000. Перейдем теперь к систематическому изучению объектов, входящих в состав этих библиотек.
Объекты, входящие в состав этой библиотеки, приведены в таблице:
| Объекты | Основные Свойства | Основные Методы | Назначение |
|---|---|---|---|
AnswerWizard |
Files |
ClearFileList, ResetFileList |
Единый для всего приложения Мастер Ответов. |
AnswerWizardFiles |
Item, Count |
Add, Delete |
Коллекция файлов Мастера Ответов. Свойство Files объекта AnswerWizard возвращает объект этого класса. |
|
Name, FileName, NewBalloon, On, Visible.
Всего 26 свойств |
ActivateWizard, StartWizard, EndWizard, Help, Move, ResetTips |
Хорошо знакомый по справочной системе объект Помощник. Существует в единственном экземпляре, хотя может изменять свой внешний вид. |
и связанные с ним классы: BalloonCheckBoxes, BalloonCheckBox,
BalloonLabeles,
BalloonLabel
Всего |
BalloonType, Text, Name, Button, . |
Show, Close, SetAvoidRectangle |
Диалоговое окно Помощника. Свойство NewBalloon объекта возвращает объект этого класса. В свою очередь свойства CheckBoxes и Labels объекта возвращают коллекции соответствующих классов. |
COMAddIns |
Count |
Update |
Коллекция Com-объектов, расширяющих возможности приложений Office 2000. |
COMAddIn |
Creator, Connect,
Description, Guid, Object, ProgId |
нет | Com-объект, - элемент коллекции COMAddIns. |
CommandBars |
ActionControl, ActiveMenuBar, Count, MenuAnimationStyle.
Всего 13 свойств. |
Add, FindControl, FindControls + событие OnUpdate |
Коллекция |
CommandBar |
Controls, Enabled, Type, Protection, Name, NameLocal, Index, IndexRow, Visible.
Всего 19 свойств |
FindControl, Delete, Reset, ShowPopUp |
Объект, задающий инструментальную панель, элемент коллекции CommandBars. Свойство Controls возвращает коллекцию элементов управления - объект класса CommandBarControls. |
CommandBarControls,
CommandBarControl,
CommandBarComboBox,
CommandBarButton, CommandBarPopup |
Классы, задающие элементы управления, размещаемых на инструментальных панелях - команды меню, списки и командные кнопки. | ||
DocumentProperties |
Count, Item |
Add |
Коллекция встроенных и пользовательских свойств документа. |
DocumentProperty |
LinkSource, LinkToContent, Name, Type, Value |
Delete |
Объект, задающий свойство документа, элемент коллекции DocumentProperties |
FileSearch,
FoundFiles,
PropertyTest,
PropertyTests |
Эти объекты используются при поиске файлов | ||
IFind
IFoundFiles |
Эти объекты используются при поиске файлов при работе с Macintosh | ||
HTMLProject |
HTMLProjectItems, State |
Open, RefreshDocument,
RefreshProject |
Объект определяет документ, открываемый в Редакторе VBScript в формате HTML и рассматриваемый как проект. Его свойство HTMLProjectItems возвращает коллекцию элементов этого проекта (документа) |
HTMLProjectItems |
Count |
Item |
Коллекция элементов HTML-проекта, открываемого в Редакторе VBScript. Возвращается одноименным свойством объекта HTMLProject. |
HTMLProjectItem |
Name, Text, |
Open, SaveCopyAs, LoadFromFile |
Элемент проекта (документа) - член коллекции HTMLProjectItems. |
LanguageSettings |
LanguagePreferredForEditing, LanguageID |
нет | Языковые предпочтения |
|
Префиксом начинаются общие константы, используемые в приложениях Office 2000. |
||
Scripts |
Count |
Add, Item, Delete |
Коллекция объектов Script данного документа |
Script |
ScriptText, Shape, Id, Language, Location, Extended |
Delete |
Объект Script - элемент коллекции Scripts |
WebPageFonts |
Count, Item |
нет | Коллекция шрифтов, используемых при сохранении документа как Web-страницы. |
WebPageFont |
FixedWidthFont, FixedWidthFontSize, ProportionalFont, ProportionalFontSize |
нет | Объект, задающий шрифт, - элемент коллекции WebPageFonts. |
Обратите внимание, насколько в Office 2000 расширилась библиотека Office 9.0. К четырем группам объектов, определяющим Помощника, Com - расширения, HTML- проект и объекты Script, а также языковые предпочтения и шрифты Web-страниц.
Рассмотрим эти группы объектов.
Объект , задающий Помощника, появился в предыдущей версии Office 97. Этот объект используется во всех приложениях Office 97 и Office 2000 для реализации справочной системы. Для этой же цели этот объект может использоваться и при построении собственных решений. Я уделил особое внимание возможностям применения этого объекта в решениях, создаваемых на базе Office 2000.
Еще две группы объектов, общих для приложений Office 2000, связаны с такими типичными задачами, как поиск файлов и определение свойств документов. Давайте рассмотрим эти задачи чуть более подробно.
Задача поиска нужного файла периодически возникает у всех, кто работает с компьютером. В Office 2000 возможности системы поиска возросли, добавились новые критерии поиска. Нужный файл можно разыскать, используя различные ключи и их комбинацию. Ключами поиска могут служить тип файла, его размер, дата создания, дата последней модификации, любая часть имени файла, ключевые слова, наконец, любой текст, содержащийся в файле.
Я уже говорил, что в Office 2000, - во всех его приложениях изменился внешний вид диалогового окна открытия файла (меню Файл | Открыть…). Это диалоговое окно служит и для поиска файлов. Используя многочисленные флажки, окна ввода, раскрывающиеся списки можно задать сложный критерий поиска, представляющий логическое выражение, где отдельные выражения объединены логическими
У программиста есть две возможности в организации поиска файлов - использовать объект FileSearch или коллекцию Dialogs, которая является схожим, а не общим объектом, имея свою специфику в каждом приложении. О коллекции Dialogs поговорим позже, когда будем рассматривать объекты конкретного приложения, а сейчас займемся объектом FileSearch, который обладает всей функциональностью системы поиска файлов, не требуя при этом от пользователя формирования критериев поиска вручную в диалоговом окне. Для программистов это может быть важным, поскольку по тем или иным причинам он может не хотеть предоставлять пользователям возможности самостоятельного поиска нужного файла, оберегая их, например, от возможных ошибок.
Следует сказать, что хотя в Office 2000 возможности поиска расширились и даже, как я уже говорил, изменился интерфейс соответствующего диалогового окна, это не сказалось на объектной модели. Объект FileSearch был спроектирован достаточно хорошо, так что он сохранил практически все свои свойства и методы, а его новые возможности реализуются простым расширением набора возможных значений его параметров. Я постараюсь рассказать обо всех возможностях программной организации поиска файлов на примере, в котором использую практически все методы и свойства объекта Filesearch. Так что перейдем к примеру:
Public Sub LookingFor() 'Для поиска файлов используется объект FileSearch Dim Report As String Dim i As Integer With Application.FileSearch .NewSearch .FileName = "Ch" .FileType = msoFileTypeWordDocuments .LastModified = msoLastModifiedAnyTime .LookIn = "e:" .SearchSubFolders = True .TextOrProperty = "Общее" .MatchAllWordForms = True .MatchTextExactly = False 'Добавление других критериев поиска AddCriteria If .Execute(SortBy:=msoSortByLastModified, _ SortOrder:=msoSortOrderDescending) > 0 Then Report = "Найдено " .FoundFiles.Count " файлов!" vbCrLf For i = 1 To .FoundFiles.Count Report = Report .FoundFiles(i) vbCrLf Next i Call MsgBox(Report, vbInformation, "Отчет о найденных файлах!") End If End With PrintTest End Sub
Прежде всего, следует заметить, что объект FileSearch находится на самом верху иерархии объектов, он встроен непосредственно в объект Application и возвращается при вызове соответствующего свойства этого объекта. Таким образом, для всех документов приложения действует единый объект FileSearch, что необходимо учитывать при многократном обращении к этому объекту. Именно поэтому наш поиск начинается с вызова метода NewSearch, который восстанавливает значения параметров поиска, принятые по умолчанию, так как в противном случае будут сохраняться значения параметров, установленные в предыдущем вызове объекта FileSearch. Далее в примере устанавливаются различные свойства объекта FileSearch, задающие критерии поиска. Рассмотрим их подробнее:
TextOrProperty. Необходимым условием возможности такого поиска является подключение на этапе инсталляции приложения соответствующего словаря, содержащего словоформы.Как видите, многие критерии поиска можно задать, установив требуемые значения свойств объекта FileSearch. Однако этот объект имеет и другой, более общий способ задания критериев. Дело в том, что среди свойств этого объекта есть свойство PropertyTests, возвращающее одноименную коллекцию, элементами которой являются объекты класса PropertyTest. Каждый из этих объектов задает один критерий поиска, а вся коллекция в целом - сложный критерий поиска, элементы которого объединены логическими FileSearch автоматически формируются элементы коллекции PropertyTests. Но эта коллекция имеет и Add, позволяющий добавлять новые критерии. Возникает коллизия - пересечение со свойствами, поскольку одни и те же критерии можно задать, используя свойства объекта FileSearch, либо метод Add коллекции PropertyTests. Я рекомендую в таких ситуациях использовать свойства. Достоинство метода Add состоит в том, что можно добавлять новые критерии поиска, не вводя новых свойств объекта FileSearch. Давайте рассмотрим небольшую процедуру AddCriteria, добавляющую критерии поиска и вызываемую в нашем примере:
Public Sub AddCriteria() 'Добавление критериев поиска файлов With Application.FileSearch 'Первый критерий .PropertyTests.Add name:="Дата создания", _ Condition:=msoConditionAnytimeBetween, _ Value:="1/10/1999", SecondValue:="1/06/2000" 'Второй критерий .PropertyTests.Add name:="Размер", _ Condition:=msoConditionMoreThan, _ Value:=200000, Connector:=msoConnectorOr End With End Sub
У метода Add пять параметров:
Name - задает имя критерия. Оно должно принадлежать фиксированному набору возможных критериев. Для добавления новых критериев поиска достаточно просто расширить набор возможных имен.Condition - задает одно из возможных условий для данного критерия. Каждому критерию соответствует свой набор условий, задаваемых соответствующими константами.Value - задает значение условия. Тип значения зависит от используемого условия.SecondValue - некоторые условия требуют задания двух значений, как правило, определяющих границы интервала возможных значений.Connector - этот параметр имеет два возможных значения и определяет логическую связку "И" или "ИЛИ", используемую при добавлении критерия к общему условию поиска.В нашем примере добавлены два критерия к тем, что были заданы с помощью свойств объекта FileSearch. В соответствии с выбранными установками будут разыскиваться файлы, созданные в течение 8 месяцев, начиная с 1-го октября 1999 года до 1-го июня 2000 года, либо файлы, чей размер превосходит 200К. Заметьте, что при задании размера файла единицей измерения является байт, так что можно задать точный размер файла, если он конечно известен.
Но вернемся к рассмотрению процедуры LookingFor. После того, как критерий поиска сформирован, в ней вызывается метод Execute, запускающий сам поиск. В результате работы этого метода формируется коллекция файлов FoundFiles, удовлетворяющих FoundFiles объекта FileSearch. Метод Execute возвращает в качестве результата число найденных файлов или, что тоже, число элементов коллекции FoundFiles. Параметры метода Execute позволяют отсортировать требуемым образом элементы этой коллекции. Взгляните, как выглядит сформированный отчет о результатах работы поиска:
(рис 5.1) Отчет о найденных файлахЗаметьте, коллекция FoundFiles обладает одной интересной особенностью, отличающей ее от других коллекций, - ее элементы не являются объектами некоторого класса (FoundFile), как это обычно бывает. Но, конечно, обращение FoundFiles(i) позволяет получить доступ к i-му элементу этой коллекции - строке, задающей полный путь к файлу.
В заключение приведу
Public Sub PrintTest() 'Печать свойств объекта FileSearch With Application.FileSearch Debug.Print "Имя файла содержит ", .FileName Debug.Print "Тип файла", .FileType Debug.Print "Последняя модификация", .LastModified Debug.Print "Поиск ведется в ", .LookIn Debug.Print "Учет словоформ ", .MatchAllWordForms Debug.Print "Точное соответствие", .MatchTextExactly Debug.Print "Поиск в подпапках", .SearchSubFolders Debug.Print "Текст или свойство", .TextOrProperty End With 'Печать критериев поиска Dim Ptest As PropertyTest For Each Ptest In Application.FileSearch.PropertyTests With Ptest Debug.Print "Имя =", .name Debug.Print "Номер условия =", .Condition Debug.Print "Коннектор =", .Connector Debug.Print "Значение =", .Value Debug.Print "Второе значение =", .SecondValue End With Next Ptest 'Печать найденных файлов Dim Namefile As Variant With Application.FileSearch Debug.Print "Найдено файлов - ", .FoundFiles.Count For Each Namefile In .FoundFiles Debug.Print "Путь найденного файла -", Namefile Next Namefile End With End Sub
Я не буду приводить результатов тестовой печати, отмечу лишь, в коллекции PropertyTests содержится пять элементов, три из которых сформированы на основе заданных свойств объекта FileSearch, а два добавлены в результате вызова метода Add.
Все документы Office имеют общие встроенные свойства, начиная с имени автора, заглавия документа, даты его создания, кончая такими свойствами, как размер, дата последней модификации или, например, дата последней печати документа. Наряду со встроенными свойствами ко всем документам разрешается добавлять собственные свойства, определенные пользователем. В объектной модели Office эти факты нашли отражение в существовании коллекции DocumentProperties, элементы которой являются объектами класса DocumentProperty. Следует заметить, что в каждом конкретном приложении (Word, Excel, Power Point и так далее) у документов нет свойства DocumentProperties, а есть два свойства BuiltinDocumentProperties и CustomDocumentProperties. Эти свойства возвращают две подколлекции встроенных и пользовательских свойств с элементами, принадлежащими общему классу DocumentProperty и в совокупности составляющих коллекцию DocumentProperties.
Работа с этими объектами достаточно проста. В коллекцию можно добавлять элементы, используя метод Add, а для удаления используется метод Delete, который, как это часто бывает с коллекциями Office 2000, принадлежит не самой коллекции, а классу, связанному с элементом, в данном случае - классу DocumentProperty. Должно быть также понятно, что методы Add и Delete применимы только к пользовательским свойствам, поскольку встроенные свойства нельзя ни добавлять, ни удалять.
Значения всех свойств доступны как для чтения, так и для записи. Однако встроенные свойства, как правило, формируются автоматически при работе с документом, как, например, дата создания документа. Еще одно важное замечание, состоит в том, что в коллекцию
Public Sub AddCustomProperties()
'Добавление в документ трех пользовательских свойств
With ActiveDocument.CustomDocumentProperties
If Not ExistProperty("Кому") Then
.Add name:="Кому", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:="Документ предназначен программистам!", _
LinkSource:=""
End If
If Not ExistProperty("Оценка") Then
.Add name:="Оценка", _
LinkToContent:=False, _
Type:=msoPropertyTypeNumber, _
Value:=5, _
LinkSource:=""
End If
If Not ExistProperty("NewProp") Then
.Add name:="NewProp", _
LinkToContent:=True, _
Type:=msoPropertyTypeString, _
LinkSource:="Название"
End If
End With
End Sub
Public Function ExistProperty(PropertyName As String) As Boolean
'Возвращает True, если в коллекции DocumentProperties
'существует свойство с именем PropertyName
Dim prop As DocumentProperty, Exist As Boolean
Exist = False
For Each prop In ActiveDocument.CustomDocumentProperties
If prop.name = PropertyName Then
Exist = True
Exit For
End If
Next prop
ExistProperty = Exist
End Function
В процедуре AddCustomProperties к активному документу добавляются три пользовательских свойства. В двух первых случаях указывается имя свойства, его тип и значение. При задании значения свойства булев параметр LinkToContent должен быть установлен как False. Если же этот параметр установлен как True, то должен быть задан параметр LinkSource, определяющий источник в документе, связываемый со свойством. Заметьте, добавление свойства в коллекцию приводит к ошибке, если в ней уже есть свойство с аналогичным именем. По этой причине для корректности перед добавлением свойства производится проверка на существование.
В следующей процедуре печатаются данные обо всех свойствах документа - встроенных и пользовательских. Замечу сразу, что при выполнении этой процедуры будут возникать ошибки, поскольку, как я уже говорил, не все свойства определены для документов различных приложений. Поэтому в процедуре предусмотрен обработчик ошибок подобных ситуаций, позволяющий перейти к рассмотрению следующего свойства:
Public Sub PrintingProperties() 'Печать свойств - встроенных и пользовательских Dim prop As DocumentProperty For Each prop In ActiveDocument.BuiltInDocumentProperties Debug.Print "Имя свойства - ", prop.name On Error Resume Next If prop.LinkToContent Then Debug.Print "Источник -", prop.LinkSource Else: Debug.Print "Значение - ", prop.Value End If Next prop For Each prop In ActiveDocument.CustomDocumentProperties Debug.Print "Имя свойства - ", prop.name If prop.LinkToContent Then Debug.Print "Источник -", prop.LinkSource Else: Debug.Print "Значение - ", prop.Value End If Next prop End Sub
Перейдем теперь к рассмотрению новинок, появившихся в библиотеке Office 9.0. Напомню, к ним относятся следующие группы объектов: Мастер Ответов, Com - расширения, HTML- проект и объекты Script, а также языковые предпочтения и шрифты Web-страниц.
Мастер Ответов (Answer Wizard) хорошо знаком пользователям Office 2000, благодаря работе с Помощником (Office Answer Wizard, доступного теперь в Office 2000. Чтобы Мастер Ответов корректно готовил ответы на вопросы пользователя, касающиеся специфики разработанной программистом системы, необходимо в коллекцию файлов Мастера Ответов - объект AnswerWizardFiles добавить один или несколько специальных файлов с расширением "aw", содержащие, по сути, ответы на все возможные вопросы пользователя. Возникает естественный вопрос, где же взять такие файлы? Ответ прост, - нужно подготовить их, используя специальный инструментарий - Answer Wizard Builder. Этот Построитель Ответов строит aw- файл, используя ранее созданный chm-файл. Возникает естественный вопрос, где же взять такой файл? Ответ прост, - его нужно создать, используя специальный инструментарий - HTML Help Answer Wizard и применять его в собственных разработках.
Технология COM лежит в основе создания продуктов Microsoft. Технология претендует на роль стандарта, ее используют многие фирмы, разрабатывающие программное обеспечение. Элементом этой технологии стали COM AddIns, появившиеся в Office 2000. Надстройки или расширения (AddIns) появились в предыдущей версии Office 97. В Office 2000 наряду с коллекцией AddIns появился и новый объект, задающий коллекцию COMAddIns.
Надстройки предназначены для расширения функциональных возможностей приложений Office 2000. Надстройка, ориентированная на конкретное приложение (AddIn), создается внутри этого приложения, не требует никакого специального инструментария, и представляет своего рода глобальный шаблон. Надстройка COM AddIn, организованная, обычно, в виде DLL может работать в разных приложениях Office 2000. Для ее создания требуется специальный инструментарий, - ее можно создать, например, в среде Visual Basic или в Office 2000 версии Developer, где имеются необходимые для этого средства.
Объекты ComAddIn и их коллекция ComAddIns устроены достаточно просто и рассказ о них не требует большого времени. Однако детальное рассмотрение всех вопросов, связанных с созданием и применением надстроек, требует, по крайней мере, отдельной главы, а подробный разговор о COM-технологии и отдельной книги. Насчет отдельной книги не знаю, а лекцию, посвященную надстройкам - Addins и ComAddIns, Вы сможете прочесть в этой книге.
В первой лекции этой книги я отмечал, что одной из основных тенденций развития Office 2000 является миграция в Интернет. Документы Office 2000 становятся доступными для коллективной работе в сети, и Web-страницы, видимо, станут основной формой представления документов, с которыми в ближайшем будущем будет работать массовый пользователь. Office и Интернет - наиболее перспективное и интересное направление развития офисного программирования. Но в этой книге я, к сожалению, не буду подробно рассматривать эту тему. Поэтому и разговор о новых общих объектах Script, коллекции Scripts, HtmlProject, появившихся в библиотеке Office 2000, будет носить обзорный характер.
Прежде всего, поговорим о том, откуда берутся эти объекты, как они создаются, и в каких ситуациях возникает необходимость работы с ними. Начну с последнего вопроса, - необходимость работы с этими объектами возникает только в том случае, если предполагается публиковать документы Office 2000 в Internet и предоставить пользователям возможность активной работы с этими документами. Более того, эти объекты необходимы лишь тогда, когда предполагается создание VBSript-кода "на лету". Тогда без этих объектов точно уж не обойтись. А теперь несколько слов о том, как и когда эти объекты появляются. Я коротко напомню то, что уже говорилось в первой лекции. Все документы Office 2000 могут быть сохранены в формате HTML и могут просматриваться в Internet тем или иным браузером, как Web-страницы. Конечно же, в большинстве случаев простого просмотра документов недостаточно и пользователь должен иметь возможность активной работы со страницами, производить над ней те или иные действия. Активность Web-страниц всегда предполагает выполнение некоторого программного кода. В то же время современные обозреватели (браузеры) могут выполнять код, написанный только на JavaScript или VBScript. Язык сценариев VBScript, также как и язык VBA, является членом семейства Visual Basic. В отличие от VB и VBA этот язык является бестиповым или, что тоже, языком с одним единственным типом Variant. В объявлениях переменных их тип не указывается. Во многом, язык VBScript похож на язык VBA, является событийно-управляемым, имеет многие из его встроенных функций. Так что программирование на VBScript напоминает программирование на VBA, хотя и имеет свою специфику. Программирование на VBScript ведется в среде специального Редактора VBScript, вызываемого из всех приложений Office 2000. Напомню, нажатие комбинации клавиш "ALT + F11" открывает среду Редактора VBA, а нажатие - "ALT + Shift + F11" открывает похожую среду Редактора VBScript. Работа в этом Редакторе и является основным источником появления объектов Script и, соответственно, коллекции Scripts. Всякий раз, когда в Редакторе в HTML-текст вставляется тег <Script> с соответствующим кодом, в коллекцию Scripts добавляется очередной объект Script, задающий добавленный тег. Наряду с таким обычным способом создания программного кода, возможно программирование "на лету", когда Script-код создается программно. Для этой цели можно использовать либо свойства объекта Script, либо метод Add коллекции Scripts, позволяющий добавить тег Script к тексту Web-страницы. Параметры этого метода позволяю задать сам добавляемый код, местоположение тега, его ID. Метод Delete позволяет программно удалять элементы коллекции Scripts, удаляя, тем самым, соответствующие теги. Добраться до нужного элемента коллекции можно либо по индексу, либо по ID элемента. Конечно, предпочтительнее использовать ID, а не индексы, поскольку индексы элементов коллекции могут меняться в ходе редактирования HTML-текста. По этой причине желательно всегда задавать ID у тегов Script, как при программном создании кода, так и при работе в среде Редактора VBScript.
Объект HtmlProject схож с объектом VBProject. Он используется при программном создании элементов Web-страницы и позволяет программно добраться не только до Script-кода, но и до других элементов, располагаемых на Web-странице, в частности до форм и элементов управления, расположенных на форме. На самом этом объекте я не буду останавливаться подробно, но о схожем объекте - VBProject я расскажу подробно. Оба объекта описывают программные проекты, связанные с документом. Один объект описывает проект, написанный на VBA, другой - на VBScript.
В заключение хочу все-таки дать первое представление об HTML-проекте и программировании на VBScript. Приведу один небольшой и традиционный пример "Приветствие", в котором программный проект создается на VBScript, частично руками, частично программно. Взгляните, как выглядит среда Редактора VBScript.
(рис 5.2) Редактор VBScript Я не буду останавливаться на подробном описании среды Редактора, отмечу только еще раз схожесть интерфейса при создании HTML-проекта и VBA-проекта. В левом окне Project Explorer - Обозревателя Проектов показана структура HTML-проекта. В правом окне кода показан HTML-код страницы. Окно открыто на вкладке "Source". Следующая вкладка "Quick View" позволяет осуществить быстрый просмотр страницы, увидев ее так, как она будет видна в браузере Internet Explorer. На рисунке можно увидеть и часть Script-кода, добавленного мной в проект.
Какой же код я добавил в HTML-проект, чтобы заработало традиционное приветствие? Прежде всего, я добавил тег <Script> с описанием функции Hello. Этот тег был вставлен в конец заголовка проекта непосредственно перед закрывающим тегом <Head>. Вот этот текст:
<script id="Hello" language="VBScript">
<!--
Function Hello()
Dim Answer
Answer = InputBox("Enter Your Name, please")
MsgBox ("Hi " Answer "!")
UserName.innerText = "Hello, " Answer "!"
End Function
-->
</script>
Я задал также атрибут "onload" тега <body> и добавил тег <div>, для которого установил значение id, равное "UserName". Тег <div> (от division - раздел) задает местоположение раздела, в который программным путем я запишу имя, введенное пользователем.
Приведу полный код, начиная с открывающего и кончая закрывающим тегом <body>. Большая часть этого кода сформирована автоматически.
<body lang=EN-US style='tab-interval:36.0pt' onload="Hello()"> <div class=Section1> <h3><span lang=RU>Документ, содержащий </span><span style='mso-ansi-language: EN-US'>Script</span><span lang=RU> код.<o:p></o:p></span></h3> </div> <div id=UserName> <!-- Сюда вставляется имя, введенное пользователем --> </div> </body>
Учитывая, что не все знакомы с языками HTML и VBScript, приведу подробные комментарии.
Script языка HTML. Как и большинство других элементов языка HTML, элемент Script состоит из открывающего и закрывающего тега Script и внутреннего HTML-текста. Для элемента Script внутренний HTML-текст задает Script-код, который может служить описанием функций, а может и непосредственно исполняться.Script содержит два атрибута - id и language. Для них заданы соответственно значения "Hello" и "VBScript". Выше я отмечал, что значение атрибута id, позволяет идентифицировать объект Script в соответствующей коллекции Scripts. Значение "VBScript" атрибута language указывает браузеру, что код написан на языке VBScript, альтернативой могло бы быть значение "JavaScript".InputBox и MsgBox, позволяющие организовать диалог с пользователем - запросить у него имя и затем открыть окно с приветствием пользователя, используя введенное имя. Заметьте также, что тип переменной Answer при объявлении не указан.Несмотря на то, что ценность объявления переменной, когда не указан ее тип, безусловно, снижена, я рекомендую при программировании на VBScript всегда объявлять переменные, по возможности, задавая их тип в комментариях.
Load вызывает функцию Hello. Вот как выглядит открытие этого документа в Internet Explorer:
(рис 5.3) Открытие документа, содержащего Script-код Я не буду приводить окно приветствия, открываемое функцией MsgBox, - оно выглядит стандартным образом, но все-таки приведу окончательный вид Web-страницы после программного добавления текста в тег <div>:
(рис 5.4) Программная вставка текста на Web-страницеПобочным результатом моей работы в Редакторе VBScript является появление у документа объекта Script и, соответственно, непустой коллекции объектов Scripts, так что появилась возможность программной работы с этими объектами. В окне отладки я провел несколько экспериментов, анализируя некоторые свойства этих объектов. Вот эти результаты:
? ActiveDocument.Scripts.Count
1
? ActiveDocument.Scripts(1).Id
Hello
? ActiveDocument.Scripts(1).Language
2
? ActiveDocument.Scripts(1).Location
1
? ActiveDocument.Scripts(1).ScriptText
<!--
Function Hello()
Dim Answer
Answer = InputBox("Enter Your Name, please")
MsgBox ("Hi " Answer "!")
UserName.innerText = "Hello, " Answer "!"
End Function
-->
Единственный элемент коллекции Scripts - объект Script появился в момент создания в Редакторе соответствующего элемента HTML. Свойства объекта полностью отражают свойства этого элемента. Свойство Location, например, указывает, что элемент Script расположен в заголовочной части Web-страницы, - принадлежит тегу <Head>, а не <Body>. Значения некоторых свойств можно менять программно. В частности, программно можно изменить сам Script-код. Вот, функция, добавляющая еще одну строку в тело функции "Hello":
Public Sub ChangeProperties()
'Изменение свойств объекта Script
Dim Txt1 As String, Txt2 As String
Dim Ind As Integer
Dim TxtAdd As String
'Добавляемая строка кода
TxtAdd = "MsgBox (""Bye-Bye "" Answer ""!"")" _
vbCrLf vbTab
With ActiveDocument.Scripts("Hello")
Txt1 = .ScriptText
'Добавление строки кода в текст функции
Ind = VBA.InStrRev(Txt1, "End Function")
Txt2 = VBA.Left(Txt1, Ind - 1) TxtAdd _
VBA.Right(Txt1, VBA.Len(Txt1) - Ind + 1)
.ScriptText = Txt2
' Нельзя программно изменить значение свойства Location
'.Location = 2
End With
'Обновление проекта после сделанных изменений
ActiveDocument.HTMLProject.RefreshProject
End Sub
В процедуре читается Script-код объекта Script, затем этот код модифицируется программным путем и измененное значение присваивается вновь объекту, что меняет его поведение. Обратите внимание, после введения изменений вызывается метод RefreshProject объекта HTMLProject, сохраняющий в проекте сделанные изменения.
Эта процедура демонстрирует один из возможных способов "программирования на лету". Другой способ использует уже упоминавшийся метод Add, которым обладает коллекция Scripts. Я не буду углубляться в детали описания и использования объектов Script и HTMLProject, надеясь, что этих обзорных сведений достаточно, чтобы понять суть этих объектов и их возможности. В заключение скажу только, что работа с объектами Script возможна только в приложениях Word, Excel и Power Point.
Нововведения в Office 2000 полезны разработчикам, использующим разные языки. Одно из таких замечательных качеств - возможность изменять язык интерфейса, справочной системы буквально "на лету". Раз языковые установки можно менять, то появился общий для приложений Office 2000 объект LanguageSettings, свойства которого позволяют проверить, какие именно установки приняты для интерфейса, справочной системы, инсталляционные установки, определяющие, например, вид цифр. Используя свойства этого объекта, можно также определить, какие языки (их может быть несколько) являются предпочтительными при редактировании текстов. Вот процедура, проверяющая все эти установки:
Public Sub LangSet() 'Проверка языковых установок With Application.LanguageSettings If .LanguagePreferredForEditing(msoLanguageIDRussian) _ And .LanguagePreferredForEditing(msoLanguageIDEnglishUS) Then MsgBox "Русский и Английский - оба являются предпочтительными языками редактирования" End If MsgBox "Для данного документа выбраны следующие языковые установки " _ vbCrLf "Язык инсталляции - " .LanguageID(msoLanguageIDInstall) _ vbCrLf " Язык интерфейса - " .LanguageID(msoLanguageIDUI) _ vbCrLf " Язык справки - " .LanguageID(msoLanguageIDHelp) End With End Sub
Появление нового объекта WebPageFont и соответствующей коллекции связано с уже многократно упоминавшейся тенденцией представления документов Office 2000 в виде Web-страниц. Объект WebPageFont позволяет установить, какой шрифт будет использоваться по умолчанию на Web-страницах в качестве пропорционального шрифта и шрифта фиксированной ширины, а также размер этих шрифтов. Вот простая процедура, изменяющая эти установки:
Public Sub ChangeFonts() 'Изменение свойств Web-шрифтов With Application.DefaultWebOptions .Fonts(msoCharacterSetCyrillic) _ .ProportionalFont = "Arial Cyr" .Fonts(msoCharacterSetCyrillic) _ .FixedWidthFont = "Times New Roman Cyr" .Fonts(msoCharacterSetCyrillic) _ .ProportionalFontSize = 12 .Fonts(msoCharacterSetCyrillic) _ .FixedWidthFontSize = 14 Debug.Print .Fonts(msoCharacterSetCyrillic).ProportionalFont Debug.Print .Fonts(msoCharacterSetCyrillic).ProportionalFontSize Debug.Print .Fonts(msoCharacterSetCyrillic).FixedWidthFont Debug.Print .Fonts(msoCharacterSetCyrillic).FixedWidthFontSize End With End Sub
Библиотека Office 9.0 содержит набор констант, начинающихся с префикса
На этом я закончу описание общих объектов, входящих в библиотеку Office 9.0, подключаемую по умолчанию ко всем документам Office 2000.
В отличие от библиотеки Microsoft Office 9.0
Эта библиотека содержит класс объектов UserForm, определяющий саму форму, и классы объектов, задающих различные элементы управления, такие как CheckBox, ComboBox, CommandButton и другие. Когда на форме размещается тот или иной элемент управления - кнопка, список, текстовое поле, то в программном проекте, точнее в модуле, связанном с формой, автоматически создается объект соответствующего класса, с которым можно программно работать. Классы, задающие элементы управления, входят в состав библиотеки Forms 2.0 и составляют ее основу. Их относительно немного, - они соответствуют так называемым стандартным элементам управления.
Что же еще входит в состав этой библиотеки? Прежде всего, следует упомянуть два класса - Control и Controls. Первый из них задает общий класс элементов управления, задающий их свойства, методы и события, независящие от конкретного типа элемента управления. Таким образом, каждый объект, задающий элемент управления, одновременно принадлежит двум классам - конкретному и общему. Класс Controls, как обычно, задает коллекцию элементов управления.
Хочу обратить внимание, на важность класса Control. Дело в том, что на форме можно размещать как стандартные, так и дополнительные элементы управления. Число возможных дополнительных элементов управления велико и все время пополняется, - они разрабатываются, как Microsoft, так и независимыми фирмами. Напомню, как можно поместить дополнительные элементы управления в форму. Если в режиме проектирования на Control, которому принадлежат как стандартные, так и дополнительные элементы управления, что позволяет со всеми элементами управления работать программно.
Я не буду сейчас подробно рассказывать о каждом из классов объектов, входящих в состав библиотеки Forms 2.0, ограничусь только этим кратким обзором. Разрешите поставить точку, но прежде одно замечание. В библиотеку Forms 2.0 включен и ряд стандартных элементов управления, используемых при работе в формате HTML. По существу, для многих классов, задающих стандартные элементы управления, имеются и соответствующие HTML-классы, как, например, HTMLCheckBox, HTMLOption, HTMLText, HTMLPassword. В справочной системе сведения о них отсутствуют, а я пока не разобрался, как с ними можно работать. Я подозреваю, что эти объекты появляются в проекте, когда в Редакторе VBScript на Web-страницу добавляются соответствующие элементы управления. Но это гипотеза, требующая проверки. Напомню, что и в Редакторе VBScript есть своя
При описании объектов этой библиотеки я также ограничусь обзором, прежде всего, по той причине, что эту библиотеку в отличие от прочих составляют не столько объекты, сколько методы, собранные в стандартные модули. Библиотеку VBA составляют три класса объектов, 13 модулей и большое число перечислений, задающих константы, используемых в тех или иных ситуациях.
В библиотеку VBA входят три класса объектов:
Модули библиотеки VBA
Как я уже говорил, большую часть библиотеки VBA составляют различные стандартные процедуры, встроенные в язык. Эти процедуры и функции, называемые методами, объединены в зависимости от их предназначения в те или иные модули. Ограничусь кратким описанием этих модулей:
Is- функции, имя которых состоит из префикса Is, после которого следует имя типа. Эти функции позволяют уточнить тип значения переменной, объявленной как Variant. Так функция IsObject позволяет узнать, представляет ли значение такой переменной некоторый объект. В этот же набор входит и такая функция, как RGB, позволяющая задать требуемый цвет по его трем компонентам - красной, зеленой и голубой составляющим цвета.На этом я закончу обзор этой библиотеки.
В отличие от большинства библиотек, содержащих общие объекты, библиотека VBIDE не подключается к каркасу документа по умолчанию. Она не подключается автоматически, как это происходит с библиотекой Forms 2.0 при создании формы. Эту библиотеку необходимо подключать самому вручную или программно в тех случаях, когда предполагается программная работа с самим программным проектом. Программирование на лету, программное создание форм,
| Объекты | Основные Свойства | Основные Методы | Назначение |
|---|---|---|---|
AddIn |
Collection, Connect, Description, GUID, Object, ProgID, |
нет | Класс Addin описывает надстройки, специфические для того или иного приложения и самого VBA. Поэтому этот класс включен во все библиотеки - Word, Excel и, в том числе, библиотеку VBIDE. |
AddIns |
Count, |
Item, Update |
Коллекция объектов AddIn, доступных в среде разработки программного проекта. |
CodeModule |
CodePane, CountOfLines, CountOfDeclarationLines, ProcBodyLine
Всего 11 свойств |
AddFromFile, AddFromString, InsertLines, ReplaceLines, Find, CreateEventsProc, DeleteLines |
Представляет код модуля. Является одним из основных объектов, с которым приходится работать при программировании на лету. Примеры использования даны в лекции 4. |
CodePane |
CodeModule, CodePaneView, Collection, CountOfVisibleLines, |
GetSelection, SetSelection, Show |
Подокно, в котором отображается код модуля. Такое окно может быть не единственным. |
CodePanes |
Count, Parent, |
Item |
Коллекция активных подокон кода. |
ContainedVBControls |
Count, Parent, |
Add, Item. Remove |
Коллекция объектов VBControl |
Events и связанные с ним классы: CommandBarEvents, FileControlsEvents, RefererncesEvents, SelectedVBControlsEvents,
VBComponentsEvents, VBControlsEvents, VBProjectsEvents |
Свойства класса Events возвращают объект одного из связанных классов, каждый из которых обладает некоторым набором событий. Эти события могут включаться в AddIn для VBA. |
||
IDTExtensibility |
Нет | OnAddInsUpdate, OnConnection, OnDisConnection, OnStartUpComplete |
Этот объект позволяет реализовать стандартный интерфейс в AddIn для VBA. |
LinkedWindows |
Count, |
Add, Item, Remove |
Коллекция окон, связанных с VB IDE |
Member |
Всего 19 свойств | нет | Некоторый набор свойств, допустимых при работе с проектом. Включает общедоступные (public) атрибуты из библиотеки типов. |
Members |
Count, Parent, |
Item |
Коллекция элементов модуля. Соответствует тому, что можно увидеть в правом окне при выборе модуля в окне просмотра объектов. |
Property |
Collection, IndexedValue, Name, NumIndices, Object, Value, |
нет | Представляет свойства объекта |
Properties |
Count, Parent, |
Item |
Коллекция объектов Property |
References |
Count, Parent, |
AddFromFile, AddFromGUID, Item, Remove.
Два события: ItemAdded, ItemRemoved |
Коллекция ссылок. Позволяет программным путем добавлять и удалять ссылки на библиотеки и проекты. |
SelectedVBControls |
Count, Parent, |
Clear, Copy, Cut, Item.
Два события: ItemAdded, ItemRemoved |
Коллекция выбранных элементов формы. |
VBComponent |
CodeModule, Designer, HelpContextId и другие.
Всего 15 свойств. |
Activate, InsertFile, SaveAs и другие.
Всего 7 методов. |
Представляет компоненту программного проекта - модуль или форму. Один из центральных объектов при работе с программным проектом. |
VBComponents |
Count, Parent, |
Add, AddCustom, AddFromFile, AddFromTemplate, Item, Remove + 6 событий |
Коллекция компонент, составляющих программный проект. |
VBControl |
ClassName, ControlObject, ControlType и другие.
Всего 10 свойств. |
ZOrder |
Представляет объект VBControl - элемент управления, размещаемый на форме. |
VBControls |
Count, Parent, |
Add, Item, Remove.
3 события: ItemAdded, itemRemoved, ItemRenamed |
Коллекция объектов VBControl. |
|
ActiveVBProject, DisplayModel, Name,
5 свойств возвращают основные коллекции: AddIns, CodePanes, CommandBars, VBProjects, Windows. Всего 18 свойств. |
Quit |
Корневой объект, задающий
Редактор Visual Basic. Все остальные объекты библиотеки, так или иначе, вложены в объект |
VBForm |
CanPaste, ContainedVBControls, Parent, SelectedVBControls, VBControls, |
Paste, SelectAll |
Объект, задающий форму в программном проекте. |
VBNewProjects |
Count, |
Item |
Коллекция проектов, добавленных в результате выполнения специальных операций. |
VBProject |
VBComponents, Name, HelpFile, HelpContextID, IsDirty и другие.
Всего 16 свойств. |
AddToolBoxProgId, MakeCompiledFile, ReadProperty, SaveAs, WriteProperty |
Представляет программный проект. Один из центральных объектов, без которого не обойтись при программной работе с проектом. |
VBProjects |
Count, Parent, . |
Add, AddFromFile, AddFRomTemplate, FileName, Item, Remove, SaveAs.
События: ItemActivate, ItemAdded, ItemRemoved, ItemRenamed |
Коллекция объектов VBProject. |
Я решил привести сводку всех объектов, включенных в библиотеку VBIDE, основываясь на том, какие объекты можно увидеть в окне просмотра объектов. Для программистов, создающих достаточно серьезные программные проекты, не обойтись без работы с этими объектами, без знания их свойств и методов. Хочу предупредить, что справочная система по этим объектам частично отсутствует, а там, где она есть, оставляет желать лучшего. Более того, не со всеми из указанных свойств и методов можно реально работать в Office 2000. Некоторые из них будут реализованы в следующих версиях.
Как видите, общих объектов, с которыми приходится работать в различных приложениях Office 2000, достаточно много. Схожих объектов еще больше. Вряд ли представляется возможным их перечисление. Я напомню, что схожими, я назвал объекты, имеющие общие методы или свойства. Фактически, схожими называются объекты, у которых доля одинаковых свойств и методов достаточно высока. Такое определение не является строгим и допускает определенный произвол в толковании того, являются ли два объекта схожими. Тем не менее, понятие схожести достаточно важное, поскольку облегчает изучение объектов, позволяет лучше ориентироваться в этом сложном мире объектов Office 2000.
Я приведу несколько примеров того, что я называю схожими объектами:
Count и методом Item, который иногда называется свойством. Большинство коллекций имеют метод Add и Delete, который иногда называется Remove. Конечно же, важно при изучении этого семейства классов иметь общее представление о коллекции. В качестве эталона можно рассматривать класс Collection, встроенного в язык VBA. Все остальные классы можно рассматривать как вариации этого эталона. Замечу, что если бы и разработчики Office 2000, проектируя очередной класс коллекции, исходили бы из определенного эталона (шаблона класса), то мера схожести этих классов была бы выше. Реально, многие различия в этих классах можно было бы устранить. Понятно, что некоторые различия носят принципиальный характер. Так для коллекций, элементы которых являются Add и Delete являются недопустимыми.Application - Word.Application, Excel.Application и другие. Действительно, определенная схожесть есть, хотя, с моей точки зрения и здесь могла бы быть достигнута более высокая степень схожести.Document, WorkBook , Slide и другие, еще один пример схожих объектов.Range и Selection, задающих рабочую область в приложениях Word и Excel.Dialogs и объекты Dialog, входящие в состав всех приложений, представляют еще одну важную и типичную группу схожих объектов.Поставим точку.
Office 2000 это не просто совокупность отдельных приложений, - приложения Office 2000 тесно интегрированы между собой и имеют много общего - интерфейс, схожее поведение в различных ситуациях, единую среду Редакторов VBA и VBScript, возможность взаимодействия. За счет чего же достигается эта общность, как технологически выдерживается общая линия развития различных приложений? Достичь этого во многом удается за счет того, что Office построен по принципам объектно-ориентированного программирования (ООП), основан на COM-технологии и представляет множество объектов, объединенных в библиотеки. Совокупность этих библиотек составляет, как уже говорилось, каркас документов. При создании каждого нового документа Office 2000 автоматически строится каркас документа по умолчанию.
В зависимости от вида документа в его каркас включаются те или иные библиотеки из всей совокупности библиотек, а, следовательно, подключаются и объекты этих библиотек. Некоторые из этих библиотек содержат объекты, общие для всех приложений Office 2000, и включаются в каркасы всех документов. Благодаря этому, все приложения независимо от их типа будут иметь общие функции и во многом одинаково выглядеть в тех ситуациях, когда действия и внешний вид определяются методами и свойствами объектов этих библиотек. Общность (общие объекты) - это одна из главных, но не единственная причина, обуславливающая близость приложений Office 2000 и облегчающая работу в этой интегрированной среде. Другая причина - Схожесть (схожие объекты) - состоит в том, что многие объекты, принадлежащие специализированным библиотекам, имеют эквивалентные или весьма близкие свойства, методы и события. Объекты не являются совпадающими, но во многом их свойства и поведение может быть схожим.
Таким образом, в среде Office 2000 программист в своей работе часто сталкивается с общими и схожими объектами. Общими объектами являются, например, объекты класса CommandBar, FileSearch, новые объекты OWC - Office Web Components, введенные в Office 2000, и многие другие объекты. Не менее важную роль играют и схожие объекты, такие, у которых частично совпадают свойства, события и методы. В качестве примеров схожих объектов можно привести коллекции, большинство из которых имеют методы Add и Remove (Delete) для добавления и удаления элементов Range и Selection, представляющие, конечно же, разные объекты в приложениях Word и Excel, но, тем не менее, имеющие много схожего в их поведении. Microsoft использует оба способа достижения общности. Так, с одной стороны, в Office 2000 добавлены общие объекты OWC, с другой стороны, публикация документов Office 2000 на Web-страницах достигается за счет того, что добавлено
общее поведение к схожим объектам, задающим документы Office 2000 (Document в приложении Word,
Начнем наше подробное обсуждение общности и схожести с рассмотрения основных библиотек, содержащих общие объекты:
проекты приложений Office 2000. Перейдем теперь к систематическому изучению объектов, входящих в состав этих библиотек.
Объекты, входящие в состав этой библиотеки, приведены в таблице:
| Объекты | Основные Свойства | Основные Методы | Назначение |
|---|---|---|---|
AnswerWizard |
Files |
ClearFileList, ResetFileList |
Единый для всего приложения Мастер Ответов. |
AnswerWizardFiles |
Item, Count |
Add, Delete |
Коллекция файлов Мастера Ответов. Свойство Files объекта AnswerWizard возвращает объект этого класса. |
|
Name, FileName, NewBalloon, On, Visible.
Всего 26 свойств |
ActivateWizard, StartWizard, EndWizard, Help, Move, ResetTips |
Хорошо знакомый по справочной системе объект Помощник. Существует в единственном экземпляре, хотя может изменять свой внешний вид. |
и связанные с ним классы: BalloonCheckBoxes, BalloonCheckBox,
BalloonLabeles,
BalloonLabel
Всего |
BalloonType, Text, Name, Button, . |
Show, Close, SetAvoidRectangle |
Диалоговое окно Помощника. Свойство NewBalloon объекта возвращает объект этого класса. В свою очередь свойства CheckBoxes и Labels объекта возвращают коллекции соответствующих классов. |
COMAddIns |
Count |
Update |
Коллекция Com-объектов, расширяющих возможности приложений Office 2000. |
COMAddIn |
Creator, Connect,
Description, Guid, Object, ProgId |
нет | Com-объект, - элемент коллекции COMAddIns. |
CommandBars |
ActionControl, ActiveMenuBar, Count, MenuAnimationStyle.
Всего 13 свойств. |
Add, FindControl, FindControls + событие OnUpdate |
Коллекция |
CommandBar |
Controls, Enabled, Type, Protection, Name, NameLocal, Index, IndexRow, Visible.
Всего 19 свойств |
FindControl, Delete, Reset, ShowPopUp |
Объект, задающий инструментальную панель, элемент коллекции CommandBars. Свойство Controls возвращает коллекцию элементов управления - объект класса CommandBarControls. |
CommandBarControls,
CommandBarControl,
CommandBarComboBox,
CommandBarButton, CommandBarPopup |
Классы, задающие элементы управления, размещаемых на инструментальных панелях - команды меню, списки и командные кнопки. | ||
DocumentProperties |
Count, Item |
Add |
Коллекция встроенных и пользовательских свойств документа. |
DocumentProperty |
LinkSource, LinkToContent, Name, Type, Value |
Delete |
Объект, задающий свойство документа, элемент коллекции DocumentProperties |
FileSearch,
FoundFiles,
PropertyTest,
PropertyTests |
Эти объекты используются при поиске файлов | ||
IFind
IFoundFiles |
Эти объекты используются при поиске файлов при работе с Macintosh | ||
HTMLProject |
HTMLProjectItems, State |
Open, RefreshDocument,
RefreshProject |
Объект определяет документ, открываемый в Редакторе VBScript в формате HTML и рассматриваемый как проект. Его свойство HTMLProjectItems возвращает коллекцию элементов этого проекта (документа) |
HTMLProjectItems |
Count |
Item |
Коллекция элементов HTML-проекта, открываемого в Редакторе VBScript. Возвращается одноименным свойством объекта HTMLProject. |
HTMLProjectItem |
Name, Text, |
Open, SaveCopyAs, LoadFromFile |
Элемент проекта (документа) - член коллекции HTMLProjectItems. |
LanguageSettings |
LanguagePreferredForEditing, LanguageID |
нет | Языковые предпочтения |
|
Префиксом начинаются общие константы, используемые в приложениях Office 2000. |
||
Scripts |
Count |
Add, Item, Delete |
Коллекция объектов Script данного документа |
Script |
ScriptText, Shape, Id, Language, Location, Extended |
Delete |
Объект Script - элемент коллекции Scripts |
WebPageFonts |
Count, Item |
нет | Коллекция шрифтов, используемых при сохранении документа как Web-страницы. |
WebPageFont |
FixedWidthFont, FixedWidthFontSize, ProportionalFont, ProportionalFontSize |
нет | Объект, задающий шрифт, - элемент коллекции WebPageFonts. |
Обратите внимание, насколько в Office 2000 расширилась библиотека Office 9.0. К четырем группам объектов, определяющим Помощника, Com - расширения, HTML- проект и объекты Script, а также языковые предпочтения и шрифты Web-страниц.
Рассмотрим эти группы объектов.
Объект , задающий Помощника, появился в предыдущей версии Office 97. Этот объект используется во всех приложениях Office 97 и Office 2000 для реализации справочной системы. Для этой же цели этот объект может использоваться и при построении собственных решений. Я уделил особое внимание возможностям применения этого объекта в решениях, создаваемых на базе Office 2000.
Еще две группы объектов, общих для приложений Office 2000, связаны с такими типичными задачами, как поиск файлов и определение свойств документов. Давайте рассмотрим эти задачи чуть более подробно.
Задача поиска нужного файла периодически возникает у всех, кто работает с компьютером. В Office 2000 возможности системы поиска возросли, добавились новые критерии поиска. Нужный файл можно разыскать, используя различные ключи и их комбинацию. Ключами поиска могут служить тип файла, его размер, дата создания, дата последней модификации, любая часть имени файла, ключевые слова, наконец, любой текст, содержащийся в файле.
Я уже говорил, что в Office 2000, - во всех его приложениях изменился внешний вид диалогового окна открытия файла (меню Файл | Открыть…). Это диалоговое окно служит и для поиска файлов. Используя многочисленные флажки, окна ввода, раскрывающиеся списки можно задать сложный критерий поиска, представляющий логическое выражение, где отдельные выражения объединены логическими
У программиста есть две возможности в организации поиска файлов - использовать объект FileSearch или коллекцию Dialogs, которая является схожим, а не общим объектом, имея свою специфику в каждом приложении. О коллекции Dialogs поговорим позже, когда будем рассматривать объекты конкретного приложения, а сейчас займемся объектом FileSearch, который обладает всей функциональностью системы поиска файлов, не требуя при этом от пользователя формирования критериев поиска вручную в диалоговом окне. Для программистов это может быть важным, поскольку по тем или иным причинам он может не хотеть предоставлять пользователям возможности самостоятельного поиска нужного файла, оберегая их, например, от возможных ошибок.
Следует сказать, что хотя в Office 2000 возможности поиска расширились и даже, как я уже говорил, изменился интерфейс соответствующего диалогового окна, это не сказалось на объектной модели. Объект FileSearch был спроектирован достаточно хорошо, так что он сохранил практически все свои свойства и методы, а его новые возможности реализуются простым расширением набора возможных значений его параметров. Я постараюсь рассказать обо всех возможностях программной организации поиска файлов на примере, в котором использую практически все методы и свойства объекта Filesearch. Так что перейдем к примеру:
Public Sub LookingFor() 'Для поиска файлов используется объект FileSearch Dim Report As String Dim i As Integer With Application.FileSearch .NewSearch .FileName = "Ch" .FileType = msoFileTypeWordDocuments .LastModified = msoLastModifiedAnyTime .LookIn = "e:" .SearchSubFolders = True .TextOrProperty = "Общее" .MatchAllWordForms = True .MatchTextExactly = False 'Добавление других критериев поиска AddCriteria If .Execute(SortBy:=msoSortByLastModified, _ SortOrder:=msoSortOrderDescending) > 0 Then Report = "Найдено " .FoundFiles.Count " файлов!" vbCrLf For i = 1 To .FoundFiles.Count Report = Report .FoundFiles(i) vbCrLf Next i Call MsgBox(Report, vbInformation, "Отчет о найденных файлах!") End If End With PrintTest End Sub
Прежде всего, следует заметить, что объект FileSearch находится на самом верху иерархии объектов, он встроен непосредственно в объект Application и возвращается при вызове соответствующего свойства этого объекта. Таким образом, для всех документов приложения действует единый объект FileSearch, что необходимо учитывать при многократном обращении к этому объекту. Именно поэтому наш поиск начинается с вызова метода NewSearch, который восстанавливает значения параметров поиска, принятые по умолчанию, так как в противном случае будут сохраняться значения параметров, установленные в предыдущем вызове объекта FileSearch. Далее в примере устанавливаются различные свойства объекта FileSearch, задающие критерии поиска. Рассмотрим их подробнее:
TextOrProperty. Необходимым условием возможности такого поиска является подключение на этапе инсталляции приложения соответствующего словаря, содержащего словоформы.Как видите, многие критерии поиска можно задать, установив требуемые значения свойств объекта FileSearch. Однако этот объект имеет и другой, более общий способ задания критериев. Дело в том, что среди свойств этого объекта есть свойство PropertyTests, возвращающее одноименную коллекцию, элементами которой являются объекты класса PropertyTest. Каждый из этих объектов задает один критерий поиска, а вся коллекция в целом - сложный критерий поиска, элементы которого объединены логическими FileSearch автоматически формируются элементы коллекции PropertyTests. Но эта коллекция имеет и Add, позволяющий добавлять новые критерии. Возникает коллизия - пересечение со свойствами, поскольку одни и те же критерии можно задать, используя свойства объекта FileSearch, либо метод Add коллекции PropertyTests. Я рекомендую в таких ситуациях использовать свойства. Достоинство метода Add состоит в том, что можно добавлять новые критерии поиска, не вводя новых свойств объекта FileSearch. Давайте рассмотрим небольшую процедуру AddCriteria, добавляющую критерии поиска и вызываемую в нашем примере:
Public Sub AddCriteria() 'Добавление критериев поиска файлов With Application.FileSearch 'Первый критерий .PropertyTests.Add name:="Дата создания", _ Condition:=msoConditionAnytimeBetween, _ Value:="1/10/1999", SecondValue:="1/06/2000" 'Второй критерий .PropertyTests.Add name:="Размер", _ Condition:=msoConditionMoreThan, _ Value:=200000, Connector:=msoConnectorOr End With End Sub
У метода Add пять параметров:
Name - задает имя критерия. Оно должно принадлежать фиксированному набору возможных критериев. Для добавления новых критериев поиска достаточно просто расширить набор возможных имен.Condition - задает одно из возможных условий для данного критерия. Каждому критерию соответствует свой набор условий, задаваемых соответствующими константами.Value - задает значение условия. Тип значения зависит от используемого условия.SecondValue - некоторые условия требуют задания двух значений, как правило, определяющих границы интервала возможных значений.Connector - этот параметр имеет два возможных значения и определяет логическую связку "И" или "ИЛИ", используемую при добавлении критерия к общему условию поиска.В нашем примере добавлены два критерия к тем, что были заданы с помощью свойств объекта FileSearch. В соответствии с выбранными установками будут разыскиваться файлы, созданные в течение 8 месяцев, начиная с 1-го октября 1999 года до 1-го июня 2000 года, либо файлы, чей размер превосходит 200К. Заметьте, что при задании размера файла единицей измерения является байт, так что можно задать точный размер файла, если он конечно известен.
Но вернемся к рассмотрению процедуры LookingFor. После того, как критерий поиска сформирован, в ней вызывается метод Execute, запускающий сам поиск. В результате работы этого метода формируется коллекция файлов FoundFiles, удовлетворяющих FoundFiles объекта FileSearch. Метод Execute возвращает в качестве результата число найденных файлов или, что тоже, число элементов коллекции FoundFiles. Параметры метода Execute позволяют отсортировать требуемым образом элементы этой коллекции. Взгляните, как выглядит сформированный отчет о результатах работы поиска:
(рис 5.1) Отчет о найденных файлахЗаметьте, коллекция FoundFiles обладает одной интересной особенностью, отличающей ее от других коллекций, - ее элементы не являются объектами некоторого класса (FoundFile), как это обычно бывает. Но, конечно, обращение FoundFiles(i) позволяет получить доступ к i-му элементу этой коллекции - строке, задающей полный путь к файлу.
В заключение приведу
Public Sub PrintTest() 'Печать свойств объекта FileSearch With Application.FileSearch Debug.Print "Имя файла содержит ", .FileName Debug.Print "Тип файла", .FileType Debug.Print "Последняя модификация", .LastModified Debug.Print "Поиск ведется в ", .LookIn Debug.Print "Учет словоформ ", .MatchAllWordForms Debug.Print "Точное соответствие", .MatchTextExactly Debug.Print "Поиск в подпапках", .SearchSubFolders Debug.Print "Текст или свойство", .TextOrProperty End With 'Печать критериев поиска Dim Ptest As PropertyTest For Each Ptest In Application.FileSearch.PropertyTests With Ptest Debug.Print "Имя =", .name Debug.Print "Номер условия =", .Condition Debug.Print "Коннектор =", .Connector Debug.Print "Значение =", .Value Debug.Print "Второе значение =", .SecondValue End With Next Ptest 'Печать найденных файлов Dim Namefile As Variant With Application.FileSearch Debug.Print "Найдено файлов - ", .FoundFiles.Count For Each Namefile In .FoundFiles Debug.Print "Путь найденного файла -", Namefile Next Namefile End With End Sub
Я не буду приводить результатов тестовой печати, отмечу лишь, в коллекции PropertyTests содержится пять элементов, три из которых сформированы на основе заданных свойств объекта FileSearch, а два добавлены в результате вызова метода Add.
Все документы Office имеют общие встроенные свойства, начиная с имени автора, заглавия документа, даты его создания, кончая такими свойствами, как размер, дата последней модификации или, например, дата последней печати документа. Наряду со встроенными свойствами ко всем документам разрешается добавлять собственные свойства, определенные пользователем. В объектной модели Office эти факты нашли отражение в существовании коллекции DocumentProperties, элементы которой являются объектами класса DocumentProperty. Следует заметить, что в каждом конкретном приложении (Word, Excel, Power Point и так далее) у документов нет свойства DocumentProperties, а есть два свойства BuiltinDocumentProperties и CustomDocumentProperties. Эти свойства возвращают две подколлекции встроенных и пользовательских свойств с элементами, принадлежащими общему классу DocumentProperty и в совокупности составляющих коллекцию DocumentProperties.
Работа с этими объектами достаточно проста. В коллекцию можно добавлять элементы, используя метод Add, а для удаления используется метод Delete, который, как это часто бывает с коллекциями Office 2000, принадлежит не самой коллекции, а классу, связанному с элементом, в данном случае - классу DocumentProperty. Должно быть также понятно, что методы Add и Delete применимы только к пользовательским свойствам, поскольку встроенные свойства нельзя ни добавлять, ни удалять.
Значения всех свойств доступны как для чтения, так и для записи. Однако встроенные свойства, как правило, формируются автоматически при работе с документом, как, например, дата создания документа. Еще одно важное замечание, состоит в том, что в коллекцию
Public Sub AddCustomProperties()
'Добавление в документ трех пользовательских свойств
With ActiveDocument.CustomDocumentProperties
If Not ExistProperty("Кому") Then
.Add name:="Кому", _
LinkToContent:=False, _
Type:=msoPropertyTypeString, _
Value:="Документ предназначен программистам!", _
LinkSource:=""
End If
If Not ExistProperty("Оценка") Then
.Add name:="Оценка", _
LinkToContent:=False, _
Type:=msoPropertyTypeNumber, _
Value:=5, _
LinkSource:=""
End If
If Not ExistProperty("NewProp") Then
.Add name:="NewProp", _
LinkToContent:=True, _
Type:=msoPropertyTypeString, _
LinkSource:="Название"
End If
End With
End Sub
Public Function ExistProperty(PropertyName As String) As Boolean
'Возвращает True, если в коллекции DocumentProperties
'существует свойство с именем PropertyName
Dim prop As DocumentProperty, Exist As Boolean
Exist = False
For Each prop In ActiveDocument.CustomDocumentProperties
If prop.name = PropertyName Then
Exist = True
Exit For
End If
Next prop
ExistProperty = Exist
End Function
В процедуре AddCustomProperties к активному документу добавляются три пользовательских свойства. В двух первых случаях указывается имя свойства, его тип и значение. При задании значения свойства булев параметр LinkToContent должен быть установлен как False. Если же этот параметр установлен как True, то должен быть задан параметр LinkSource, определяющий источник в документе, связываемый со свойством. Заметьте, добавление свойства в коллекцию приводит к ошибке, если в ней уже есть свойство с аналогичным именем. По этой причине для корректности перед добавлением свойства производится проверка на существование.
В следующей процедуре печатаются данные обо всех свойствах документа - встроенных и пользовательских. Замечу сразу, что при выполнении этой процедуры будут возникать ошибки, поскольку, как я уже говорил, не все свойства определены для документов различных приложений. Поэтому в процедуре предусмотрен обработчик ошибок подобных ситуаций, позволяющий перейти к рассмотрению следующего свойства:
Public Sub PrintingProperties() 'Печать свойств - встроенных и пользовательских Dim prop As DocumentProperty For Each prop In ActiveDocument.BuiltInDocumentProperties Debug.Print "Имя свойства - ", prop.name On Error Resume Next If prop.LinkToContent Then Debug.Print "Источник -", prop.LinkSource Else: Debug.Print "Значение - ", prop.Value End If Next prop For Each prop In ActiveDocument.CustomDocumentProperties Debug.Print "Имя свойства - ", prop.name If prop.LinkToContent Then Debug.Print "Источник -", prop.LinkSource Else: Debug.Print "Значение - ", prop.Value End If Next prop End Sub
Перейдем теперь к рассмотрению новинок, появившихся в библиотеке Office 9.0. Напомню, к ним относятся следующие группы объектов: Мастер Ответов, Com - расширения, HTML- проект и объекты Script, а также языковые предпочтения и шрифты Web-страниц.
Мастер Ответов (Answer Wizard) хорошо знаком пользователям Office 2000, благодаря работе с Помощником (Office Answer Wizard, доступного теперь в Office 2000. Чтобы Мастер Ответов корректно готовил ответы на вопросы пользователя, касающиеся специфики разработанной программистом системы, необходимо в коллекцию файлов Мастера Ответов - объект AnswerWizardFiles добавить один или несколько специальных файлов с расширением "aw", содержащие, по сути, ответы на все возможные вопросы пользователя. Возникает естественный вопрос, где же взять такие файлы? Ответ прост, - нужно подготовить их, используя специальный инструментарий - Answer Wizard Builder. Этот Построитель Ответов строит aw- файл, используя ранее созданный chm-файл. Возникает естественный вопрос, где же взять такой файл? Ответ прост, - его нужно создать, используя специальный инструментарий - HTML Help Answer Wizard и применять его в собственных разработках.
Технология COM лежит в основе создания продуктов Microsoft. Технология претендует на роль стандарта, ее используют многие фирмы, разрабатывающие программное обеспечение. Элементом этой технологии стали COM AddIns, появившиеся в Office 2000. Надстройки или расширения (AddIns) появились в предыдущей версии Office 97. В Office 2000 наряду с коллекцией AddIns появился и новый объект, задающий коллекцию COMAddIns.
Надстройки предназначены для расширения функциональных возможностей приложений Office 2000. Надстройка, ориентированная на конкретное приложение (AddIn), создается внутри этого приложения, не требует никакого специального инструментария, и представляет своего рода глобальный шаблон. Надстройка COM AddIn, организованная, обычно, в виде DLL может работать в разных приложениях Office 2000. Для ее создания требуется специальный инструментарий, - ее можно создать, например, в среде Visual Basic или в Office 2000 версии Developer, где имеются необходимые для этого средства.
Объекты ComAddIn и их коллекция ComAddIns устроены достаточно просто и рассказ о них не требует большого времени. Однако детальное рассмотрение всех вопросов, связанных с созданием и применением надстроек, требует, по крайней мере, отдельной главы, а подробный разговор о COM-технологии и отдельной книги. Насчет отдельной книги не знаю, а лекцию, посвященную надстройкам - Addins и ComAddIns, Вы сможете прочесть в этой книге.
В первой лекции этой книги я отмечал, что одной из основных тенденций развития Office 2000 является миграция в Интернет. Документы Office 2000 становятся доступными для коллективной работе в сети, и Web-страницы, видимо, станут основной формой представления документов, с которыми в ближайшем будущем будет работать массовый пользователь. Office и Интернет - наиболее перспективное и интересное направление развития офисного программирования. Но в этой книге я, к сожалению, не буду подробно рассматривать эту тему. Поэтому и разговор о новых общих объектах Script, коллекции Scripts, HtmlProject, появившихся в библиотеке Office 2000, будет носить обзорный характер.
Прежде всего, поговорим о том, откуда берутся эти объекты, как они создаются, и в каких ситуациях возникает необходимость работы с ними. Начну с последнего вопроса, - необходимость работы с этими объектами возникает только в том случае, если предполагается публиковать документы Office 2000 в Internet и предоставить пользователям возможность активной работы с этими документами. Более того, эти объекты необходимы лишь тогда, когда предполагается создание VBSript-кода "на лету". Тогда без этих объектов точно уж не обойтись. А теперь несколько слов о том, как и когда эти объекты появляются. Я коротко напомню то, что уже говорилось в первой лекции. Все документы Office 2000 могут быть сохранены в формате HTML и могут просматриваться в Internet тем или иным браузером, как Web-страницы. Конечно же, в большинстве случаев простого просмотра документов недостаточно и пользователь должен иметь возможность активной работы со страницами, производить над ней те или иные действия. Активность Web-страниц всегда предполагает выполнение некоторого программного кода. В то же время современные обозреватели (браузеры) могут выполнять код, написанный только на JavaScript или VBScript. Язык сценариев VBScript, также как и язык VBA, является членом семейства Visual Basic. В отличие от VB и VBA этот язык является бестиповым или, что тоже, языком с одним единственным типом Variant. В объявлениях переменных их тип не указывается. Во многом, язык VBScript похож на язык VBA, является событийно-управляемым, имеет многие из его встроенных функций. Так что программирование на VBScript напоминает программирование на VBA, хотя и имеет свою специфику. Программирование на VBScript ведется в среде специального Редактора VBScript, вызываемого из всех приложений Office 2000. Напомню, нажатие комбинации клавиш "ALT + F11" открывает среду Редактора VBA, а нажатие - "ALT + Shift + F11" открывает похожую среду Редактора VBScript. Работа в этом Редакторе и является основным источником появления объектов Script и, соответственно, коллекции Scripts. Всякий раз, когда в Редакторе в HTML-текст вставляется тег <Script> с соответствующим кодом, в коллекцию Scripts добавляется очередной объект Script, задающий добавленный тег. Наряду с таким обычным способом создания программного кода, возможно программирование "на лету", когда Script-код создается программно. Для этой цели можно использовать либо свойства объекта Script, либо метод Add коллекции Scripts, позволяющий добавить тег Script к тексту Web-страницы. Параметры этого метода позволяю задать сам добавляемый код, местоположение тега, его ID. Метод Delete позволяет программно удалять элементы коллекции Scripts, удаляя, тем самым, соответствующие теги. Добраться до нужного элемента коллекции можно либо по индексу, либо по ID элемента. Конечно, предпочтительнее использовать ID, а не индексы, поскольку индексы элементов коллекции могут меняться в ходе редактирования HTML-текста. По этой причине желательно всегда задавать ID у тегов Script, как при программном создании кода, так и при работе в среде Редактора VBScript.
Объект HtmlProject схож с объектом VBProject. Он используется при программном создании элементов Web-страницы и позволяет программно добраться не только до Script-кода, но и до других элементов, располагаемых на Web-странице, в частности до форм и элементов управления, расположенных на форме. На самом этом объекте я не буду останавливаться подробно, но о схожем объекте - VBProject я расскажу подробно. Оба объекта описывают программные проекты, связанные с документом. Один объект описывает проект, написанный на VBA, другой - на VBScript.
В заключение хочу все-таки дать первое представление об HTML-проекте и программировании на VBScript. Приведу один небольшой и традиционный пример "Приветствие", в котором программный проект создается на VBScript, частично руками, частично программно. Взгляните, как выглядит среда Редактора VBScript.
(рис 5.2) Редактор VBScriptЯ не буду останавливаться на подробном описании среды Редактора, отмечу только еще раз схожесть интерфейса при создании HTML-проекта и VBA-проекта. В левом окне Project Explorer - Обозревателя Проектов показана структура HTML-проекта. В правом окне кода показан HTML-код страницы. Окно открыто на вкладке "Source". Следующая вкладка "Quick View" позволяет осуществить быстрый просмотр страницы, увидев ее так, как она будет видна в браузере Internet Explorer. На рисунке можно увидеть и часть Script-кода, добавленного мной в проект.
Какой же код я добавил в HTML-проект, чтобы заработало традиционное приветствие? Прежде всего, я добавил тег <Script> с описанием функции Hello. Этот тег был вставлен в конец заголовка проекта непосредственно перед закрывающим тегом <Head>. Вот этот текст:
<script id="Hello" language="VBScript">
<!--
Function Hello()
Dim Answer
Answer = InputBox("Enter Your Name, please")
MsgBox ("Hi " Answer "!")
UserName.innerText = "Hello, " Answer "!"
End Function
-->
</script>
Я задал также атрибут "onload" тега <body> и добавил тег <div>, для которого установил значение id, равное "UserName". Тег <div> (от division - раздел) задает местоположение раздела, в который программным путем я запишу имя, введенное пользователем.
Приведу полный код, начиная с открывающего и кончая закрывающим тегом <body>. Большая часть этого кода сформирована автоматически.
<body lang=EN-US style='tab-interval:36.0pt' onload="Hello()"> <div class=Section1> <h3><span lang=RU>Документ, содержащий </span><span style='mso-ansi-language: EN-US'>Script</span><span lang=RU> код.<o:p></o:p></span></h3> </div> <div id=UserName> <!-- Сюда вставляется имя, введенное пользователем --> </div> </body>
Учитывая, что не все знакомы с языками HTML и VBScript, приведу подробные комментарии.
Script языка HTML. Как и большинство других элементов языка HTML, элемент Script состоит из открывающего и закрывающего тега Script и внутреннего HTML-текста. Для элемента Script внутренний HTML-текст задает Script-код, который может служить описанием функций, а может и непосредственно исполняться.Script содержит два атрибута - id и language. Для них заданы соответственно значения "Hello" и "VBScript". Выше я отмечал, что значение атрибута id, позволяет идентифицировать объект Script в соответствующей коллекции Scripts. Значение "VBScript" атрибута language указывает браузеру, что код написан на языке VBScript, альтернативой могло бы быть значение "JavaScript".InputBox и MsgBox, позволяющие организовать диалог с пользователем - запросить у него имя и затем открыть окно с приветствием пользователя, используя введенное имя. Заметьте также, что тип переменной Answer при объявлении не указан.Несмотря на то, что ценность объявления переменной, когда не указан ее тип, безусловно, снижена, я рекомендую при программировании на VBScript всегда объявлять переменные, по возможности, задавая их тип в комментариях.
Load вызывает функцию Hello. Вот как выглядит открытие этого документа в Internet Explorer:
(рис 5.3) Открытие документа, содержащего Script-код Я не буду приводить окно приветствия, открываемое функцией MsgBox, - оно выглядит стандартным образом, но все-таки приведу окончательный вид Web-страницы после программного добавления текста в тег <div>:
(рис 5.4) Программная вставка текста на Web-страницеПобочным результатом моей работы в Редакторе VBScript является появление у документа объекта Script и, соответственно, непустой коллекции объектов Scripts, так что появилась возможность программной работы с этими объектами. В окне отладки я провел несколько экспериментов, анализируя некоторые свойства этих объектов. Вот эти результаты:
? ActiveDocument.Scripts.Count
1
? ActiveDocument.Scripts(1).Id
Hello
? ActiveDocument.Scripts(1).Language
2
? ActiveDocument.Scripts(1).Location
1
? ActiveDocument.Scripts(1).ScriptText
<!--
Function Hello()
Dim Answer
Answer = InputBox("Enter Your Name, please")
MsgBox ("Hi " Answer "!")
UserName.innerText = "Hello, " Answer "!"
End Function
-->
Единственный элемент коллекции Scripts - объект Script появился в момент создания в Редакторе соответствующего элемента HTML. Свойства объекта полностью отражают свойства этого элемента. Свойство Location, например, указывает, что элемент Script расположен в заголовочной части Web-страницы, - принадлежит тегу <Head>, а не <Body>. Значения некоторых свойств можно менять программно. В частности, программно можно изменить сам Script-код. Вот, функция, добавляющая еще одну строку в тело функции "Hello":
Public Sub ChangeProperties()
'Изменение свойств объекта Script
Dim Txt1 As String, Txt2 As String
Dim Ind As Integer
Dim TxtAdd As String
'Добавляемая строка кода
TxtAdd = "MsgBox (""Bye-Bye "" Answer ""!"")" _
vbCrLf vbTab
With ActiveDocument.Scripts("Hello")
Txt1 = .ScriptText
'Добавление строки кода в текст функции
Ind = VBA.InStrRev(Txt1, "End Function")
Txt2 = VBA.Left(Txt1, Ind - 1) TxtAdd _
VBA.Right(Txt1, VBA.Len(Txt1) - Ind + 1)
.ScriptText = Txt2
' Нельзя программно изменить значение свойства Location
'.Location = 2
End With
'Обновление проекта после сделанных изменений
ActiveDocument.HTMLProject.RefreshProject
End Sub
В процедуре читается Script-код объекта Script, затем этот код модифицируется программным путем и измененное значение присваивается вновь объекту, что меняет его поведение. Обратите внимание, после введения изменений вызывается метод RefreshProject объекта HTMLProject, сохраняющий в проекте сделанные изменения.
Эта процедура демонстрирует один из возможных способов "программирования на лету". Другой способ использует уже упоминавшийся метод Add, которым обладает коллекция Scripts. Я не буду углубляться в детали описания и использования объектов Script и HTMLProject, надеясь, что этих обзорных сведений достаточно, чтобы понять суть этих объектов и их возможности. В заключение скажу только, что работа с объектами Script возможна только в приложениях Word, Excel и Power Point.
Нововведения в Office 2000 полезны разработчикам, использующим разные языки. Одно из таких замечательных качеств - возможность изменять язык интерфейса, справочной системы буквально "на лету". Раз языковые установки можно менять, то появился общий для приложений Office 2000 объект LanguageSettings, свойства которого позволяют проверить, какие именно установки приняты для интерфейса, справочной системы, инсталляционные установки, определяющие, например, вид цифр. Используя свойства этого объекта, можно также определить, какие языки (их может быть несколько) являются предпочтительными при редактировании текстов. Вот процедура, проверяющая все эти установки:
Public Sub LangSet() 'Проверка языковых установок With Application.LanguageSettings If .LanguagePreferredForEditing(msoLanguageIDRussian) _ And .LanguagePreferredForEditing(msoLanguageIDEnglishUS) Then MsgBox "Русский и Английский - оба являются предпочтительными языками редактирования" End If MsgBox "Для данного документа выбраны следующие языковые установки " _ vbCrLf "Язык инсталляции - " .LanguageID(msoLanguageIDInstall) _ vbCrLf " Язык интерфейса - " .LanguageID(msoLanguageIDUI) _ vbCrLf " Язык справки - " .LanguageID(msoLanguageIDHelp) End With End Sub
Появление нового объекта WebPageFont и соответствующей коллекции связано с уже многократно упоминавшейся тенденцией представления документов Office 2000 в виде Web-страниц. Объект WebPageFont позволяет установить, какой шрифт будет использоваться по умолчанию на Web-страницах в качестве пропорционального шрифта и шрифта фиксированной ширины, а также размер этих шрифтов. Вот простая процедура, изменяющая эти установки:
Public Sub ChangeFonts() 'Изменение свойств Web-шрифтов With Application.DefaultWebOptions .Fonts(msoCharacterSetCyrillic) _ .ProportionalFont = "Arial Cyr" .Fonts(msoCharacterSetCyrillic) _ .FixedWidthFont = "Times New Roman Cyr" .Fonts(msoCharacterSetCyrillic) _ .ProportionalFontSize = 12 .Fonts(msoCharacterSetCyrillic) _ .FixedWidthFontSize = 14 Debug.Print .Fonts(msoCharacterSetCyrillic).ProportionalFont Debug.Print .Fonts(msoCharacterSetCyrillic).ProportionalFontSize Debug.Print .Fonts(msoCharacterSetCyrillic).FixedWidthFont Debug.Print .Fonts(msoCharacterSetCyrillic).FixedWidthFontSize End With End Sub
Библиотека Office 9.0 содержит набор констант, начинающихся с префикса
На этом я закончу описание общих объектов, входящих в библиотеку Office 9.0, подключаемую по умолчанию ко всем документам Office 2000.
В отличие от библиотеки Microsoft Office 9.0
Эта библиотека содержит класс объектов UserForm, определяющий саму форму, и классы объектов, задающих различные элементы управления, такие как CheckBox, ComboBox, CommandButton и другие. Когда на форме размещается тот или иной элемент управления - кнопка, список, текстовое поле, то в программном проекте, точнее в модуле, связанном с формой, автоматически создается объект соответствующего класса, с которым можно программно работать. Классы, задающие элементы управления, входят в состав библиотеки Forms 2.0 и составляют ее основу. Их относительно немного, - они соответствуют так называемым стандартным элементам управления.
Что же еще входит в состав этой библиотеки? Прежде всего, следует упомянуть два класса - Control и Controls. Первый из них задает общий класс элементов управления, задающий их свойства, методы и события, независящие от конкретного типа элемента управления. Таким образом, каждый объект, задающий элемент управления, одновременно принадлежит двум классам - конкретному и общему. Класс Controls, как обычно, задает коллекцию элементов управления.
Хочу обратить внимание, на важность класса Control. Дело в том, что на форме можно размещать как стандартные, так и дополнительные элементы управления. Число возможных дополнительных элементов управления велико и все время пополняется, - они разрабатываются, как Microsoft, так и независимыми фирмами. Напомню, как можно поместить дополнительные элементы управления в форму. Если в режиме проектирования на Control, которому принадлежат как стандартные, так и дополнительные элементы управления, что позволяет со всеми элементами управления работать программно.
Я не буду сейчас подробно рассказывать о каждом из классов объектов, входящих в состав библиотеки Forms 2.0, ограничусь только этим кратким обзором. Разрешите поставить точку, но прежде одно замечание. В библиотеку Forms 2.0 включен и ряд стандартных элементов управления, используемых при работе в формате HTML. По существу, для многих классов, задающих стандартные элементы управления, имеются и соответствующие HTML-классы, как, например, HTMLCheckBox, HTMLOption, HTMLText, HTMLPassword. В справочной системе сведения о них отсутствуют, а я пока не разобрался, как с ними можно работать. Я подозреваю, что эти объекты появляются в проекте, когда в Редакторе VBScript на Web-страницу добавляются соответствующие элементы управления. Но это гипотеза, требующая проверки. Напомню, что и в Редакторе VBScript есть своя
При описании объектов этой библиотеки я также ограничусь обзором, прежде всего, по той причине, что эту библиотеку в отличие от прочих составляют не столько объекты, сколько методы, собранные в стандартные модули. Библиотеку VBA составляют три класса объектов, 13 модулей и большое число перечислений, задающих константы, используемых в тех или иных ситуациях.
В библиотеку VBA входят три класса объектов:
Модули библиотеки VBA
Как я уже говорил, большую часть библиотеки VBA составляют различные стандартные процедуры, встроенные в язык. Эти процедуры и функции, называемые методами, объединены в зависимости от их предназначения в те или иные модули. Ограничусь кратким описанием этих модулей:
Is- функции, имя которых состоит из префикса Is, после которого следует имя типа. Эти функции позволяют уточнить тип значения переменной, объявленной как Variant. Так функция IsObject позволяет узнать, представляет ли значение такой переменной некоторый объект. В этот же набор входит и такая функция, как RGB, позволяющая задать требуемый цвет по его трем компонентам - красной, зеленой и голубой составляющим цвета.На этом я закончу обзор этой библиотеки.
В отличие от большинства библиотек, содержащих общие объекты, библиотека VBIDE не подключается к каркасу документа по умолчанию. Она не подключается автоматически, как это происходит с библиотекой Forms 2.0 при создании формы. Эту библиотеку необходимо подключать самому вручную или программно в тех случаях, когда предполагается программная работа с самим программным проектом. Программирование на лету, программное создание форм,
| Объекты | Основные Свойства | Основные Методы | Назначение |
|---|---|---|---|
AddIn |
Collection, Connect, Description, GUID, Object, ProgID, |
нет | Класс Addin описывает надстройки, специфические для того или иного приложения и самого VBA. Поэтому этот класс включен во все библиотеки - Word, Excel и, в том числе, библиотеку VBIDE. |
AddIns |
Count, |
Item, Update |
Коллекция объектов AddIn, доступных в среде разработки программного проекта. |
CodeModule |
CodePane, CountOfLines, CountOfDeclarationLines, ProcBodyLine
Всего 11 свойств |
AddFromFile, AddFromString, InsertLines, ReplaceLines, Find, CreateEventsProc, DeleteLines |
Представляет код модуля. Является одним из основных объектов, с которым приходится работать при программировании на лету. Примеры использования даны в лекции 4. |
CodePane |
CodeModule, CodePaneView, Collection, CountOfVisibleLines, |
GetSelection, SetSelection, Show |
Подокно, в котором отображается код модуля. Такое окно может быть не единственным. |
CodePanes |
Count, Parent, |
Item |
Коллекция активных подокон кода. |
ContainedVBControls |
Count, Parent, |
Add, Item. Remove |
Коллекция объектов VBControl |
Events и связанные с ним классы: CommandBarEvents, FileControlsEvents, RefererncesEvents, SelectedVBControlsEvents,
VBComponentsEvents, VBControlsEvents, VBProjectsEvents |
Свойства класса Events возвращают объект одного из связанных классов, каждый из которых обладает некоторым набором событий. Эти события могут включаться в AddIn для VBA. |
||
IDTExtensibility |
Нет | OnAddInsUpdate, OnConnection, OnDisConnection, OnStartUpComplete |
Этот объект позволяет реализовать стандартный интерфейс в AddIn для VBA. |
LinkedWindows |
Count, |
Add, Item, Remove |
Коллекция окон, связанных с VB IDE |
Member |
Всего 19 свойств | нет | Некоторый набор свойств, допустимых при работе с проектом. Включает общедоступные (public) атрибуты из библиотеки типов. |
Members |
Count, Parent, |
Item |
Коллекция элементов модуля. Соответствует тому, что можно увидеть в правом окне при выборе модуля в окне просмотра объектов. |
Property |
Collection, IndexedValue, Name, NumIndices, Object, Value, |
нет | Представляет свойства объекта |
Properties |
Count, Parent, |
Item |
Коллекция объектов Property |
References |
Count, Parent, |
AddFromFile, AddFromGUID, Item, Remove.
Два события: ItemAdded, ItemRemoved |
Коллекция ссылок. Позволяет программным путем добавлять и удалять ссылки на библиотеки и проекты. |
SelectedVBControls |
Count, Parent, |
Clear, Copy, Cut, Item.
Два события: ItemAdded, ItemRemoved |
Коллекция выбранных элементов формы. |
VBComponent |
CodeModule, Designer, HelpContextId и другие.
Всего 15 свойств. |
Activate, InsertFile, SaveAs и другие.
Всего 7 методов. |
Представляет компоненту программного проекта - модуль или форму. Один из центральных объектов при работе с программным проектом. |
VBComponents |
Count, Parent, |
Add, AddCustom, AddFromFile, AddFromTemplate, Item, Remove + 6 событий |
Коллекция компонент, составляющих программный проект. |
VBControl |
ClassName, ControlObject, ControlType и другие.
Всего 10 свойств. |
ZOrder |
Представляет объект VBControl - элемент управления, размещаемый на форме. |
VBControls |
Count, Parent, |
Add, Item, Remove.
3 события: ItemAdded, itemRemoved, ItemRenamed |
Коллекция объектов VBControl. |
|
ActiveVBProject, DisplayModel, Name,
5 свойств возвращают основные коллекции: AddIns, CodePanes, CommandBars, VBProjects, Windows. Всего 18 свойств. |
Quit |
Корневой объект, задающий
Редактор Visual Basic. Все остальные объекты библиотеки, так или иначе, вложены в объект |
VBForm |
CanPaste, ContainedVBControls, Parent, SelectedVBControls, VBControls, |
Paste, SelectAll |
Объект, задающий форму в программном проекте. |
VBNewProjects |
Count, |
Item |
Коллекция проектов, добавленных в результате выполнения специальных операций. |
VBProject |
VBComponents, Name, HelpFile, HelpContextID, IsDirty и другие.
Всего 16 свойств. |
AddToolBoxProgId, MakeCompiledFile, ReadProperty, SaveAs, WriteProperty |
Представляет программный проект. Один из центральных объектов, без которого не обойтись при программной работе с проектом. |
VBProjects |
Count, Parent, . |
Add, AddFromFile, AddFRomTemplate, FileName, Item, Remove, SaveAs.
События: ItemActivate, ItemAdded, ItemRemoved, ItemRenamed |
Коллекция объектов VBProject. |
Я решил привести сводку всех объектов, включенных в библиотеку VBIDE, основываясь на том, какие объекты можно увидеть в окне просмотра объектов. Для программистов, создающих достаточно серьезные программные проекты, не обойтись без работы с этими объектами, без знания их свойств и методов. Хочу предупредить, что справочная система по этим объектам частично отсутствует, а там, где она есть, оставляет желать лучшего. Более того, не со всеми из указанных свойств и методов можно реально работать в Office 2000. Некоторые из них будут реализованы в следующих версиях.
Как видите, общих объектов, с которыми приходится работать в различных приложениях Office 2000, достаточно много. Схожих объектов еще больше. Вряд ли представляется возможным их перечисление. Я напомню, что схожими, я назвал объекты, имеющие общие методы или свойства. Фактически, схожими называются объекты, у которых доля одинаковых свойств и методов достаточно высока. Такое определение не является строгим и допускает определенный произвол в толковании того, являются ли два объекта схожими. Тем не менее, понятие схожести достаточно важное, поскольку облегчает изучение объектов, позволяет лучше ориентироваться в этом сложном мире объектов Office 2000.
Я приведу несколько примеров того, что я называю схожими объектами:
Count и методом Item, который иногда называется свойством. Большинство коллекций имеют метод Add и Delete, который иногда называется Remove. Конечно же, важно при изучении этого семейства классов иметь общее представление о коллекции. В качестве эталона можно рассматривать класс Collection, встроенного в язык VBA. Все остальные классы можно рассматривать как вариации этого эталона. Замечу, что если бы и разработчики Office 2000, проектируя очередной класс коллекции, исходили бы из определенного эталона (шаблона класса), то мера схожести этих классов была бы выше. Реально, многие различия в этих классах можно было бы устранить. Понятно, что некоторые различия носят принципиальный характер. Так для коллекций, элементы которых являются Add и Delete являются недопустимыми.Application - Word.Application, Excel.Application и другие. Действительно, определенная схожесть есть, хотя, с моей точки зрения и здесь могла бы быть достигнута более высокая степень схожести.Document, WorkBook , Slide и другие, еще один пример схожих объектов.Range и Selection, задающих рабочую область в приложениях Word и Excel.Dialogs и объекты Dialog, входящие в состав всех приложений, представляют еще одну важную и типичную группу схожих объектов.Поставим точку.
Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.