Свойства - участники
Конечно, центральные объекты мира Word - это объекты, входящие в коллекции Documents и Templates, документы и шаблоны, открытые в приложении. Им-то и посвящена большая часть этой лекции. Но пока давайте хотя бы кратко коснемся объектов "второго плана".
Заголовки (CaptionLabels):
Коллекция объектов CaptionLabels (CaptionLabel) представляет заголовки, которые вставляются в документ одновременно со вставкой таблиц, рисунков, диаграмм и других подобных элементов документа. Следует отметить, что при вставке в документ каждого нового элемента определенного типа и его заголовка происходит автоматическая нумерация заголовков, (например, Рисунок 1, Рисунок 2 и т.д.).
В коллекцию разрешается добавлять новые заголовки и удалять существующие. При работе вручную следует выбрать в пункте Insert (Вставка) главного меню Word команду Caption (Название). В открывающемся диалоговом окне есть раскрывающийся список заголовков, из которого можно выбрать подходящий элемент и вставить его в документ. Кнопка New Label (Создать) позволяет добавить новый заголовок к уже имеющемуся списку. Кнопка Delete (Удалить) позволяет удалить заголовок. Вот как выглядит это окно:
Рис. 1.4. Окно заголовков
Работа руками нас интересует в малой степени, хотя, конечно, программист должен уметь это делать. Но давайте посмотрим, как это делается программно. Вначале добавим к существующей коллекции заголовков три своих заголовка:
Public Sub AddCaptions()
'Работа с коллекцией заголовков
Dim Item As CaptionLabel
With CaptionLabels
Debug.Print .Count
'Добавление трех заголовков
.Add "Мой Рисунок"
.Add "Диаграмма Excel"
.Add "Мой Пример"
Debug.Print .Count
For Each Item In CaptionLabels
Debug.Print Item.Name
Next Item
'Удаление последнего заголовка
.item(.Count).Delete
End With
End Sub
Листинг 1.3.
Вот результаты отладочной печати, появляющиеся в окне отладки (Immediate):
3
6
Figure
Table
Equation
Мой Рисунок
Диаграмма Excel
Мой Пример
Листинг 1.4.
Этот пример типичен для работы с коллекциями. Здесь добавляются и удаляются элементы коллекции, определяется их число, организуется цикл по всем элементам. Покажем теперь, как, используя эту коллекцию, можно программно вставлять в текст документа в нужном месте те или иные заголовки:
Public Sub InsertLabelInDoc()
'Вставка заголовка в текст документа
'Вставка заголовков
With ActiveDocument
.Paragraphs.Add
.Paragraphs.Last.Range.Select
Selection.InsertCaption Label:="Диаграмма Excel"
.Paragraphs.Add
.Paragraphs.Last.Range.Select
Selection.InsertCaption Label:=CaptionLabels(CaptionLabels.Count)
End With
End Sub
Листинг 1.5.
В данном примере дважды будет вставлен заголовок "Диаграмма Excel". Конечно, реально этот заголовок следует вставлять после (перед) соответствующей диаграммой, но в примере заголовки вставляются в конец документа, в последний его абзац. Заметьте, при вставке происходит автоматическая нумерация заголовков, так что в тексте документа появятся два таких заголовка:
Диаграмма Excel 1
Диаграмма Excel 2
Листинг 1.6.
Автозаголовки (AutoCaptions):
Коллекция объектов AutoCaptions (AutoCaption) представляет заголовки, которые могут быть автоматически добавлены при вставке в документ OLE-объектов. В эту коллекцию, конечно же, ни добавлять, ни удалять элементы не разрешается, но можно включить или отключить автоматическое добавление заголовка при вставке того или иного OLE-объекта. Работа вручную идет в уже упомянутом диалоговом окне, открываемом по команде Caption. Программно это можно делать так:
Public Sub WorkWithAutoLabels()
'Работа с коллекцией автозаголовков
Dim Item As AutoCaption
Debug.Print AutoCaptions.Count
For Each Item In AutoCaptions
'Включение автоматической вставки заголовка
item.AutoInsert = True
Debug.Print Item .Name
Next Item
End Sub
Листинг 1.7.
Процедура WorkWithAutoLabels включает все автозаголовки и распечатывает их имена. Приведем первую семерку имен OLE-объектов из 28 объектов, которые можно добавить в текущий момент у меня на компьютере:
28
Microsoft Word Table
Adobe Acrobat Document
Видеоклип
Microsoft Chat Room
Диаграмма Microsoft Excel
Лист Microsoft Excel
MIDI-файл
Листинг 1.8.
Автокоррекция (AutoCorrect):
Объект AutoCorrect поддерживает работу по автоматической коррекции набираемых текстов. Я широко использую возможности автокоррекции в своей работе. Чтобы не переключаться с русского на английский при печатании различных терминов, я ввел таблицу соответствующих замен. Теперь я печатаю "Ап", а получаю Application, печатаю "Во", а получаю Word и так далее. Возможности объекта AutoCorrect во многом совпадают с возможностями команды AutoCorrect (Автозамена) меню Tools. В следующем примере включаются все флажки, регулирующие процесс замены, и в коллекцию Entries, вложенную в объект, добавляются два элемента. Каждый элемент задается парой строк, первая из которых задает исходную строку, а вторая строку, заменяющую ее при автокоррекции печатаемого текста:
Public Sub WorkWithAutoCorrect()
'Работа с объектом AutoCorrect
'Включаются все флажки
With AutoCorrect
.CorrectInitialCaps = True
.CorrectSentenceCaps = True
.CorrectDays = True
.CorrectCapsLock = True
.ReplaceText = True
.ReplaceTextFromSpellingChecker = True
.CorrectKeyboardSetting = True
'В коллекцию Entries, задающую замены при автокоррекции,
'добавляются два элемента.
.Entries.AddName:="ДЕ", Value:="Диаграмма Excel"
.Entries.AddName:="ГЕ", Value:="График Excel"
End With
End Sub
Листинг 1.9.
Перемещение по тексту. Объект Browser:
Объект Browser позволяет перемещать точку вставки, указывающую на объекты в документе. Перейти можно к предыдущей или следующей точке редактирования документа. Можно также предварительно выбрать целевой объект, это может быть таблица, заголовок, комментарий или другой из некоторого набора возможных объектов, а затем переходить к следующему или предыдущему объекту выбранного типа. Вручную это делается с помощью трех инструментальных кнопок, расположенных в самом низу вертикальной полосы прокрутки окна документа. Покажем, как программно, перемещаясь по заголовкам, можно помочь пользователю найти в документе нужный ему заголовок. Вот соответствующая процедура:
Public Sub WorkWithBrowser()
'Работа с объектом Browser
Dim myrprev As Range, myrnext As Range, Answer As String
'Поиск нужного заголовка в диалоге с пользователем
'Установить заголовок в качестве цели поиска
Application.Browser.Target = wdBrowseHeading
With ActiveDocument
'Встать в начало документа
.Paragraphs.First.Range.Select
Set myrnext = Selection.Range
Do
Answer = InputBox("Это искомый заголовок? (Да/Нет)", "Заголовки", "Нет")
If Answer = "Да" Then Exit Do
'Передвинуться к следующему заголовку
Application.Browser.Next
Set myrprev = myrnext
Selection.MoveEnd (wdParagraph)
Set myrnext = Selection.Range
Loop Until (myrprev = myrnext)
If Answer = "Нет" Then
MsgBox ("В данном документе нет других заголовков стиля Heading")
End If
End With
End Sub
Листинг 1.10.
Диалоги с пользователем. Коллекция Dialogs:
Коллекция объектов Dialogs задает совокупность диалоговых окон, встроенных в Word. Добавлять новые или удалять элементы этой коллекции программным путем нельзя. Но соответствующие окна можно открыть и показать на экране дисплея и тем самым организовать диалог с пользователем по теме, заданной соответствующим окном. Коллекция Dialogs и объекты Dialog не принадлежат к общим объектам Office 2000. Вместе с тем в каждом из приложений Office 2000 есть свои объекты Dialogs и Dialog. В совокупности они составляют семейство схожих объектов, имея много общего в своем поведении и некоторую специфику, зависящую от приложения. Есть смысл хотя бы в одном приложении подробно разобраться с этими объектами, тогда в других приложениях можно будет ссылаться на знакомое поведение этих объектов.
Коллекция Dialogs устроена совсем просто. У нее стандартный для коллекций набор свойств - Count, Application, Creator, Parent и всего лишь один метод Item . Простота устройства коллекции понятна, поскольку ни добавить, ни убавить ничего нельзя, - все элементы встроены. Но, учтите, элементов у этой коллекции, то есть встроенных диалоговых окон достаточно много - более 200. К каждому из элементов коллекции можно добраться, зная его тип, задаваемый соответствующей константой, входящей в перечисление wdWordDialog.
Объект Dialog устроен более сложно. У него есть шесть свойств - Application, Creator, Parent, CommandName, Type, DefaultTab и четыре метода - Display, Execute, Show и Update. На четырех первых свойствах особо останавливаться не буду, - первые три стандартны, а четвертое, возвращающее имя процедуры, отображающей диалоговое окно, применяется разве что из любопытства. Свойство Type, имеющее статус "только для чтения", возвращает тип окна, - соответствующую константу из перечисления wdWordDialog. Более важным является свойство DefaultTab. Дело в том, что многие из открываемых окон устроены сложно и имеют различные вкладки. Если, используя это свойство, перед открытием окна установить нужную вкладку, то перед пользователем окно откроется на этой вкладке, что облегчит нелегкую жизнь пользователя. Каждая из возможных вкладок задается соответствующей константой, принадлежащей перечислению wdWordDialogTab.
Поговорим теперь о четырех методах объекта Dialog:
Show - открывает диалоговое окно, заданное объектом Dialog, после чего прерывает свою работу, давая возможность пользователю задать нужные установки в диалоговом окне и выполнить некоторые действия, для чего ему достаточно нажать ту или иную кнопку в диалоговом окне. Действия, предписанные пользователем, выполняются, и метод Show заканчивает свою работу, возвращая в качестве результата номер кнопки, нажатой пользователем. Значение - 2 соответствует кнопке Close, -1 - OK, 0 - Cancel, N>0 - командной кнопке с номером N. Вместо стандартных кнопок OK, Close, Cancel могут применяться эквивалентные по сути кнопки с другими названиями, например, "Открыть" вместо кнопки OK.
Update - обновляет установки, принятые по умолчанию для диалогового окна. Чаще всего вызывается в самом начале работы с диалоговым окном, перед тем как задаются новые значения установок.
Display - альтернатива методу Show. Также как и метод Show, открывает диалоговое окно и позволяет пользователю задать нужные установки и нажать кнопку. Однако не выполняет действия, предписанные пользователем, возвращая, по-прежнему, в качестве результата номер нажатой кнопки. После чего программа может проанализировать действия пользователя и принять окончательное решение, например, принять установки, вызвав метод Execute.
Execute - применяет текущие установки диалогового окна.
Шесть свойств и 4 метода объекта Dialog - это лишь видимая часть айсберга, каковым является объект Dialog. Нужно понимать, что каждое диалоговое окно, то есть конкретный объект Dialog имеет множество дополнительных параметров (свойств), определяющих специфику этого объекта. Основные сложности работы с этим объектом связаны с пониманием сути параметров и установкой корректных их значений. Реально здесь могут возникать различные проблемы, о которых поговорим чуть позже при рассмотрении одного из примеров. Хочу еще несколько слов сказать об использовании этих объектов. Работа с ними предполагает, что в какой-то момент программа начинает диалог с пользователем на стандартную тему, для которой в системе Office 2000 заготовлено соответствующее окно. Часто, разумно при первом открытии окна дать возможность пользователю сделать свой выбор и установить подходящие значения параметров окна. Затем установки пользователя могут быть сохранены в объекте Dialog. При повторном открытии окна используется этот объект, и окно открывается с установками, повторяющими предыдущий выбор пользователя. К сожалению, сохранение всех установок не всегда возможно.
Давайте перейдем теперь к примерам и начнем с простой и классической задачи - открытия файла. Вот пример работы с одним из наиболее употребительных диалоговых окон - окном открытия файла:
Public Sub WindowOpenFile()
'Предоставление пользователю возможности открыть любой файл.
'Открывается каталог, хранящий активный документ, с показом всех файлов.
Dim Act As Long
With Dialogs (wdDialogFileOpen)
.Name = ActiveDocument.Path & "\*.*"
Act = . Show
Debug.Print Act
If Act = -1 Then
'Файл успешно открыт и можно получить путь к нему и его имя
Debug.Print Documents(1).Path & "\" & Documents(1).Name
End If
End With
End Sub
Листинг 1.11.
Заметьте, открывающееся перед пользователем стандартное окно открытия файла предварительно настроено, так что пользователь сможет увидеть все файлы каталога, хранящего активный документ. Для этой настройки использовалось свойство (параметр) Name, которым обладает данный конкретный объект FileOpen коллекции Dialogs . Замечу, что у этого объекта более 10 различных параметров, с их помощью можно задавать пароли, статус открытия и другие свойства, связанные с открытием файла. В справочной системе в разделе "Built-in Dialog box argument lists" для каждого диалогового окна указан список его возможных параметров. К сожалению, нельзя найти ни описания сути этих параметров, ни их возможных значений. Обо всем приходится догадываться, зная имя параметра и анализируя работу руками в диалоговом окне. Заметьте, контекстные справки к элементам интерфейса диалоговых окон также не всегда существуют.
Вернемся к примеру. Он демонстрирует, как по окончании работы пользователя можно проанализировать результаты его работы и в случае успешного открытия файла получить путь к нему и его имя. Мы еще будем говорить об этом в дальнейшем, но уже сейчас стоит обратить внимание, что открытие нового файла означает добавление нового элемента в начало коллекции Documents, и я использую этот факт при получении пути и имени нового файла.
Давайте рассмотрим еще один, более сложный пример, в котором возникают некоторые проблемы. Рассказывая об общих объектах, я рассмотрел объект Filesearch, используемый для поиска файлов. Теперь рассмотрим, решение этой задачи с использованием соответствующего объекта Dialog. Я напомню, что для поиска файлов в Office 2000 следует открывать не специальное окно поиска файлов, а обычное окно открытия файлов, - то есть выполнить команду "Open". Из этого окна по нажатию кнопки "Сервис" можно перейти в окно поиска и там уже можно сформировать достаточно сложное логическое выражение, задающее условие поиска. Условия поиска могут включать размер файла, дату его создания и внесения изменений, полное или частично заданное имя файла и множество других критериев, включая, в том числе, и полно текстовый поиск. Программная работа с объектом Filesearch позволяет выполнить аналогичные операции. При работе с объектом Dialog большая часть работы возлагается на пользователя, который должен сформировать критерии поиска в момент открытия окна. Программно можно предварительно сформировать лишь некоторые критерии поиска.
У диалогового объекта Dialog FileFind большое число разнообразных параметров. Не поленюсь и приведу список всех параметров этого объекта, разделив их на две группы. В первую группу входят параметры: SearchPath, Name, SubDir, Title, Author, KeyWords, Subject, MatchCase, Text, PatternMatch, DateSavedFrom, DateSavedTo, SavedBy, DateCreatedFrom, DateCreatedTo. К этой группе я отнес параметры, смысл и значения которых мне понятны, - они служат для формирования соответствующих критериев поиска. Заметьте, что среди них нет многих параметров, доступных при формировании критериев поиска вручную, например, нельзя задать ограничение на размер отыскиваемого файла. Во вторую группу я отнес параметры, смысл или множество возможных значений которых мне не совсем понятны. Вот эти параметры: SearchName, Options, View, SortBy, ListBy, SelectedFile, Add, Delete, ShowFolders, MatchByte.
От сетований давайте перейдем к примеру работы с этим диалоговым окном:
Public Sub DialogFileFind()
'Предоставление пользователю возможности найти файл.
Dim Act As Long
Dim HisDialog As Dialog
With Dialogs (wdDialogFileFind)
Debug.Print "Type - ", .Type, "Вызываемая процедура - ", .CommandName
'Метод Update задает установки по умолчанию для ряда параметров.
'Некоторые параметры сохраняют установки предыдущего вызова FileFind
.Update
'Предварительное задание параметров перед открытием диалогового окна.
'Не все из заданных значений передаются в окно.
.SearchName = "*.doc"
.Name = "Ch6"
.SearchPath = "e:\O2000\DS2000"
.SubDir = 1
.MatchCase = 1
. DateCreatedFrom = "20.05.2000"
.Author = "Vladimir Billig"
.Text = "файлов"
.Execute
Act = . Show
If Act = -1 Then MsgBox (Documents(1).Name)
Debug.Print Act
End With
Set HisDialog = Dialogs (wdDialogFileFind)
With HisDialog
.Execute
Act = . Show
End With
End Sub
Листинг 1.12.
Обратите внимание, перед тем как открыть диалоговое окно методом Show, я программно формирую ряд критериев поиска:
Свойство SearchName позволяет указать (я так предполагаю), что поиск ведется среди документов Word.
СвойствоName говорит о том, что ищется файл, в имени которого есть сочетание "Ch6".
СвойствоSearchPath задает каталог поиска.
СвойстваSubDir и MatchCase включают флажки, указывающие, что поиск должен вестись в глубину с просмотром подкаталогов, а при полно текстовом поиске следует проверять словоформы.
Свойство DateCreatedFrom указывает, что разыскиваются файлы, созданные не ранее 20 мая 2000 года.
Свойство Author задает автора документов.
Свойство Text задает слово, чьи словоформы будут искаться в файлах.
Выполнение метода Execute непосредственно перед открытием окна позволяет передать в окно эти установки и когда окно будет открыто, то в нем будут отображаться результаты поиска, не требуя никаких действий от пользователя. Вот как выглядит диалоговое окно в момент его открытия методом Show:
Рис. 1.5. Диалоговое окно поиска файлов в момент открытия
Как видите, пользователю, в данном случае мне самому, не пришлось предпринимать никаких усилий, чтобы получить список найденных файлов. Заметьте, критерии поиска сформированы на основании программных установок. Их можно увидеть, для чего достаточно нажать кнопку "Сервис" и перейти в окно формирования критериев поиска:
Рис. 1.6. Окно формирования критериев поиска
Правда, не все параметры, заданные в программе, были успешно переданы в окно. Это касается первых двух параметров - SearchName и Name. Что касается первого из них, то при открытии диалогового окна поиск возможен только среди всех типов файлов, и эту установку нельзя изменить даже вручную. То, что не передается имя файла в окно, связано, скорее всего, с очередной недоработкой. Замечу, что в обратную сторону передать имя файла, установленное пользователем, объекту Dialog возможно.
Конечно же, пользователь может остаться неудовлетворенным полученными результатами и иметь желание скорректировать критерии поиска. Я, например, так и сделал. Мои корректировки можно увидеть на следующем рисунке:
Рис. 1.7. Корректировка критериев поиска
Усложнив условие поиска, я сократил список найденных файлов, удовлетворяющих условию поиска до трех файлов:
Рис. 1.8. Новые результаты поиска файлов
Отмечу сразу еще одну досадную недоработку, связанную с этим диалоговым окном. Если пользователь выберет из представленного списка один из файлов и захочет его открыть, нажав имеющуюся тут же кнопку "Открыть", то файл не откроется, хотя и выполняется метод Show, обязанный исполнять действия пользователя. Квалифицированный пользователь, правда, сможет справиться с этой трудностью, если щелкнет правой кнопкой по выбранному им файлу и выберет из появившегося контекстного меню пункт "Быстрый просмотр", но не "Открыть файл".
Но давайте продолжим рассмотрение нашей программы. После того как пользователь, так или иначе, завершит работу в диалоговом окне, завершит свою работу и метод Show, и программа продолжит свое нормальное выполнение. Рассмотрим, что происходит, когда создается объект HisDialog класса Dialog. Будут ли ему переданы установки, заданные пользователем во время последнего сеанса работы? Ответ половинчатый, - часть параметров передается объекту HisDialog, часть нет. Вот результаты моих экспериментов в окне отладки после формирования объекта HisDialog:
Type - 99 Вызываемая процедура - FileFind
-1
?HisDialog.SearchName
?HisDialog.Name
Ch
?HisDialog.SearchPath
E:\O2000\DS2000
?HisDialog.SubDir
1
?HisDialog.MatchCase
1
?HisDialog. DateCreatedFrom
?HisDialog.Author
?HisDialog.Text
Execute
Листинг 1.13.
Как видите, дата, автор и, очевидно, свойства, подобные им, не передаются созданному объекту. Вместе с тем ряд важных свойств сохраняются. Так что для данного диалогового окна лишь частично можно сохранить выбор установок, сделанных пользователем в ходе работы с диалоговым окном.
На этом я закончу описание работы с диалоговыми окнами в приложении Word. В заключение еще раз скажу, что это важный класс объектов, с которыми часто приходится сталкиваться разработчику решений на базе Office 2000. Нужно быть готовым к преодолению трудностей, возникающих при работе с ними.
Проверка правильности написания текста:
Три объекта, связанные с проверкой грамматики и орфографии: Languages, Dictionaries, SpellingSuggestions, позволяют установить нужный язык, выбрать словарь, в том числе пользовательские словари, а также работать со списком слов, предлагаемых для исправления при обнаружении ошибки правописания. Команды SpellingAndGrammar и Language меню Tools предоставляют аналогичные возможности при работе с документом вручную. Новый объект LanguageSettings позволяет получить установки языкового предпочтения на разных этапах работы с приложением. Взгляните на пример, в котором показана работа с этими объектами:
Public Sub WorkLang()
Dim Lang As Language, Dict As Dictionary
Dim AppLang As Long, InterfaceLang As Long, HelpLang As Long
'Орфографический словарь
Set Lang = Languages(wdRussian)
Set Dict = Lang.ActiveSpellingDictionary
Debug.Print Lang.Name
If Not (Dict Is Nothing) Then
Debug.Print Dict.Path & Application.PathSeparator & Dict.Name
End If
'Установки языка общения
AppLang = Application. LanguageSettings.LanguageID(msoLanguageIDInstall)
InterfaceLang = Application. LanguageSettings.LanguageID(msoLanguageIDUI)
HelpLang = Application. LanguageSettings.LanguageID(msoLanguageIDHelp)
If (AppLang = InterfaceLang) And (AppLang = HelpLang) _
And (AppLang = wdRussian) Then
Debug.Print "Установлен русский язык" _
& " в качестве языка инсталляции, интерфейса и справки"
ElseIf AppLang = (InterfaceLang) And (AppLang = HelpLang) _
And (AppLang = wdEnglishUS) Then
Debug.Print "Установлен английский язык" _
& " в качестве языка инсталляции, интерфейса и справки"
End If
If Application. LanguageSettings. _
LanguagePreferredForEditing(msoLanguageIDRussian) Then
Debug.Print "Русский язык является" _
& " одним из предпочтительных языков редактирования"
End If
End Sub
Листинг 1.14.
Приведем результаты работы этой процедуры, определяющие мои текущие языковые установки:
'C:\Program Files\Common Files\Microsoft Shared\Proof\MSSP_RU.LEX
Русский
Установлен английский язык в качестве языка инсталляции, интерфейса и справки
Русский язык является одним из предпочтительных языков редактирования.
Листинг 1.15.
Синонимы:
Объект SynonymInfo полезен при выборе синонимов, антонимов или слов и предложений, связанных по смыслу с текущим проверяемым словом.
Письма:
Существует несколько объектов, которые могут быть полезны при работе с почтой. Объект MailingLabel позволяет работать с конвертами и адресами. Он позволяет распечатать адрес на конверте или создать страницу с адресами, которую можно затем распечатать и использовать адреса как наклейки. Его возможности во многом совпадают с тем, что можно делать вручную при выборе пункта Envelopes and Labels (Конверты и наклейки) меню Tools (Сервис). Приведем пример работы с этим объектом. В этом примере один адрес печатается непосредственно на конверте, а для другого, отмеченного специальной закладкой с именем EnvelopeAddress, создается документ с наклейками:
Public Sub WorkWithMail()
'Работа с почтовыми сообщениями
Dim MyAddr As String, MyName As String
Dim MailLab As CustomLabel
MyName = Application.MailingLabel.DefaultLabelName
Debug.Print MyName
Set MailLab = Application.MailingLabel.CustomLabels _
.Add(Name:="My Friend", DotMatrix:=True)
MyAddr = "Россия" & vbCrLf & "Мой город" & vbCr & "Моя улица, 41, 7" & vbCr _
& "Моему другу"
'MailLab.PageSize = wdCustomLabelLetter
If Documents("DocOne").Bookmarks.Exists("EnvelopeAddress") Then
Application.MailingLabel.PrintOut _
Name:=MyName, ExtractAddress:=True, SingleLabel:=True
End If
Application.MailingLabel.CreateNewDocument _
Name:="My Friend", Address:=MyAddr
End Sub
Листинг 1.16.
Мне не удалось установить размер страницы у объекта MailLab класса CustomLabel. Полагаю, что это небольшой "жучок", не имеющий, впрочем, принципиального значения.
Электронные письма:
Объект MailMessage представляет активное EMail-сообщение. Для работы с методами этого объекта помимо активности сообщения требуется дополнительно, чтобы Word использовался, как редактор этого сообщения.
Несмотря на то, что я выполнил условия, необходимые для работы с этим объектом, ни один из его методов мне вызвать не удалось. Лишь свойство Application этого объекта вызывалось корректно, как показано в следующем примере:
Public Sub WorkWithMailMessage()
Dim mes As MailMessage
Documents("test").Activate
Set mes = Application.MailMessage
If Not (mes Is Nothing) Then
Debug.Print mes.Application.Name
'mes. DisplaySelectNamesDialog
'mes.CheckName
'mes.GoToNext
'mes. DisplayMoveDialog
End If
End Sub
Листинг 1.17.
Новый появившийся в Office 2000 объект EmailOptions позволяет устанавливать некоторые общие опции, в частности, автоматически добавляемую подпись. В нашем следующем примере добавляемая подпись выбирается в зависимости от выбранного языка. На самом деле выбирается не сама подпись, а ее имя из списка уже подготовленных подписей. Сами подписи должны быть созданы вручную на вкладке Email Options меню Tools|General.
Public Sub WorkEmail()
With Application.EmailOptions.EmailSignature
If Selection.LanguageID = wdRussian Then
.NewMessageSignature = "Подпись"
.ReplyMessageSignature = "Подпись"
Else
.NewMessageSignature = "sign1"
.ReplyMessageSignature = "sign1"
End If
Debug.Print .NewMessageSignature
End With
End Sub
Листинг 1.18.
Настройка:
С помощью объекта Options можно программным путем установить различные опции приложения и документа аналогично тому, как если бы Вы выбрали команду Options (Параметры) в меню Tools (Сервис). При работе вручную это один из наиболее часто выбираемых пунктов меню. В открывающемся окне десяток флажков, вкладок и плюс к этому пара командных кнопок. Понятно, что и соответствующий объект Options имеет десятки свойств, задавая значения которых можно программно настроить приложение нужным образом. Методов этот объект фактически не имеет. Для демонстрации я выбрал некоторое множество опций. Заметьте, что в большинстве случаев включение или отключение того или иного свойства приложения Word, распространяется на все его документы:
Public Sub WorkWithOptions()
'работа с объектом Options
Options.AutoFormatAsYouTypeReplaceFractions = True
Options.AllowDragAndDrop = True
Options.CheckGrammarWithSpelling = True
Options.EnableSound = False
Options.MonthNames = wdMonthNamesEnglish
Options.PrintComments = True
End Sub
Листинг 1.19.
Конверторы:
Word позволяет работать с документами, подготовленными не только в более ранних его версиях, но и в других текстовых редакторах. Для этого используются конверторы файлов. Коллекция объектов FileConverters позволяет выбрать тот или иной конвертор. У коллекции нет методов Add и Delete, поэтому добавлять новые конверторы или удалять ненужные конверторы программно нельзя. Это делается в процессе инсталляции Office 2000. В следующем примере печатаются имена конверторов, доступных на моей машине и анализируются некоторые их свойства:
Public Sub ConvertDoc()
'Работа с конвертором
Dim conv As FileConverter
Debug.Print Application.FileConverters.Count
For Each conv In Application.FileConverters
Debug.Print conv.Name, conv.FormatName, conv.ClassName
If conv.CanOpen And conv.CanSave Then
Debug.Print "Конвертор может открывать и сохранять файлы"
End If
Next conv
End Sub
Листинг 1.20.
Приведем результаты работы этой процедуры. Нет смысла приводить полный список всех 26 доступных конверторов, поэтому мы ограничимся несколькими строчками:
26
Text with Layout Text with Layout
Конвертор может открывать и сохранять файлы
MS-DOS Text with Layout MS-DOS Text with Layout
Конвертор может открывать и сохранять файлы
WordPerfect 5.x for Windows WrdPrfctWin
WordPerfect 5.1 for DOS WrdPrfctDOS51
Листинг 1.21.
Характеристики:
Объект FontNames отвечает за список всех доступных шрифтов. Аналогичные возможности предоставляет команда Font меню Format.
Объект RecentFiles позволяет работать со списком файлов наиболее позднего использования.
Объект System ведает информацией о характеристиках компьютера и операционной системы. Приведем пример работы с этим объектом, в котором определяются некоторые рабочие характеристики моего компьютера и окружения:
Public Sub WorkWithSystem()
'Получение характеристик компьютера и окружения
Dim env As System
Set env = Application.System
'Debug.Print "Тип компьютера - ", env.ComputerType
Debug.Print "Тип процессора - ", env.ProcessorType
Debug.Print "Операционная система - ", env.OperatingSystem
Debug.Print "Язык - ", env.LanguageDesignation
Debug.Print "Свободного дискового пространства - ", env.FreeDiskSpace
Debug.Print "Курсор - ", env.Cursor
End Sub
Листинг 1.22.
Вот результаты работы этой процедуры:
Тип процессора - Pentium
Операционная система - Windows NT
Язык - Russian (Russia)
Свободного дискового пространства - 807567360
Курсор - 2
Листинг 1.23.
Заметьте, на этой платформе не удается получить тип компьютера.
Задачи:
Коллекция объектов Tasks содержит задачи, выполняемые системой в текущий момент. Возможно, Вы и не подозреваете, как много задач выполняется за кулисами операционной системы. В следующем примере распечатывается список имен задач, входящих в момент запроса в коллекцию:
Public Sub WorkWithTasks()
'Работа с задачами
Dim Tsk As Task
Debug.Print Application.Tasks.Count
For Each Tsk In Application.Tasks
Debug.Print Tsk.Name
Next Tsk
End Sub
Листинг 1.24.
Весь список из 65 текущих задач я приводить не буду, хотя познакомиться с ним полезно. Я ограничусь приведением имен лишь некоторых задач из начала и конца списка:
65
Microsoft Agent
Microsoft Office Shortcut Bar
Menu Parent Window
NetDDE Agent
Edit
Microsoft Visual Basic - DocOne [running] - [Examples (Code)]
Ch1 - Microsoft Word
Run Sub/UserForm
View
DocOne - Microsoft Word
Edit
Transmission window
MarshalingWindow
OLEChannelWnd
MarshalingWindow
Microsoft Outlook
Program Manager
Листинг 1.25.
