Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_4 (1).docx
Скачиваний:
4
Добавлен:
10.07.2019
Размер:
973.01 Кб
Скачать
  1. Свойства - участники

Конечно, центральные объекты мира 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.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]