Com объекты word
Объектная модель MS Word, объект Application
9.1. Объектная модель MS Word
Microsoft Word 2007, как, впрочем, и другие приложения Office, имеет большую объектную модель , в которую входят множество объектов и коллекций. Однако на практике чаще всего используются лишь некоторые из них.
В частности, это следующие:
- Word (Microsoft Word) — чтобы вызывать объекты Microsoft Office Word из других приложений используется объект Word.
- Application (Приложение) — объект, который включает в себя все остальные объекты и коллекции. Сам объект Application включается в объект Word .
- Documents (Документы) — коллекция, которая включает в себя объекты Document (Документ). Объект Document представляет собой документ, с которым вы работаете в редакторе.
- Bookmarks (Закладки) — c помощью объектов этой коллекции можно задавать места в документе, в которые, при автоматическом создании, можно вставлять изменяемые части.
- Paragraphs (Абзацы), Sentences (Предложения), Words (Слова), Characters (Символы), Tables (Таблицы), OMath (Математические формулы), Эти коллекции, содержащие объекты, соответствующие их названиям, могут использоваться для обработки слов документа ( Words ), предложений ( Sentences ), отдельных символов ( Characters ) и т.д.
- Selection (Выделенная область) — представляет собой выделенную область документа или позицию, в которую будет осуществляться вставка очередного символа . Этот объект часто используют при создании простых документов. Однако у него есть существенные недостатки, что делает предпочтительнее использование объекта Range в большинстве случаев.
- Range (Диапазон) — входит в Document и другие объекты, представляет собой диапазон документа, ограниченный начальным и конечным символом.
Работая с объектной моделью MS Word следует понимать, что, например, объекты Document и Selection могут содержать одинаковые коллекции объектов, например, и там и там есть коллекция Characters , в которую входят объекты Character — то есть — символы. Однако в случае с объектом Document мы можем работать с любым символом документа, а в случае с Selection — лишь с символами в пределах выделенной области. Однако, несмотря на различия, и там и там коллекция Characters имеет одинаковые свойства и методы. То же самое касается и других коллекций и объектов.
Давайте начнем с объекта Application и здесь же поговорим об использовании объектных переменных .
9.2. Работа с объектными переменными
Объектные переменные — это переменные, которые хранят ссылки на объекты . Чтобы инициализировать объектную переменную , нужно использовать ключевое слово Set . Например, так (листинг 9.1.):
Здесь вы можете видеть присваивание переменной ссылки на объект Word.Application . Код, подобный этому, нужен в других приложениях Microsoft Office для запуска нового экземпляра MS Word .
Для того чтобы вы могли работать с Microsoft Word из других приложений — подключите библиотеку Microsoft Word 12.0 Object Library . Сделать это можно, открыв в редакторе окно References командой Tools o References .
Немного ниже мы поговорим о том, что можно делать с объектными переменными , а пока сосредоточимся на их объявлении и инициализации.
Как видите, в листинге 9.1 мы не объявляли переменную — мы сразу присвоили ей ссылку на объект . При последующей работе с такой необъявленной объектной переменной , мы не сможем пользоваться подсказкой по свойствам и методам. Вспомните — когда вы набираете в редакторе имя элемента управления и ставите после него точку — вы видите подсказку. Это очень удобно, так как позволяет избежать ошибок и излишних «походов» в справочную систему VBA .
Для того чтобы справка по свойствам и методам работала, объектную переменную надо сначала объявить, а потом присвоить ей ссылку на объект . Например, так (листинг 9.2.):
Ссылку на объект можно присвоить в процессе объявления переменной. Для этого нужно воспользоваться ключевым словом New (листинг 9.3.):
Переменную, объявленную таким образом, мы можем сразу же использовать по назначению. Новый экземпляр объекта будет создан при первом обращении к нему.
О том, как же пользоваться объектными переменными , скорее даже не ими, а объектами, на которые они ссылаются, мы поговорим ниже.
9.3. Объект Application — приложение
Объект Application можно представить в виде приложения Microsoft Word .
Такой код позволит вывести в окно сообщения информацию об имени приложения:
Как видите, здесь мы обратились к свойству Name (Имя) объекта Application . Вот, что будет выведено при его исполнении (рис. 9.1.).
Здесь мы обходимся без объектных переменных , работая с уже существующим объектом. Ведь если этот код исполняется в Microsoft Word , это значит, что сам Microsoft Word уже запущен.
Чтобы упростить обращение к нескольким свойствам объекта, можно воспользоваться оператором With-End With . Этот оператор позволяет обращаться к нескольким свойствам или методам объекта в упрощенной форме. Например, чтобы вывести имя приложения и узнать номер сборки программы нужно воспользоваться таким построением (листинг 9.4.):
Здесь мы использовали объект Application — вместо него может быть любой другой объект или объектная переменная .
Еще один оператор, которым удобно пользоваться при работе с объектами и коллекциями — это For Each…Next .
Например, для вывода в окнах сообщений имен всех открытых документов, можно написать такой код (листинг 9.5.):
Var_Doc — это переменная типа Variant . Коллекция Application.Documents содержит все открытые документы. При каждом проходе цикла в переменную var_Doc записывается ссылка на очередной объект в коллекции.
Чтобы выйти из цикла , можно воспользоваться оператором Exit For .
Сейчас мы кратко опишем важнейшие методы , свойства и события объекта Application .
9.4. Методы объекта Application
9.4.1. BuildKeyCode, KeyString — горячие клавиши
BuildKeyCode возвращает уникальный цифровой код для заданной комбинации клавиш. Используется при назначении «горячих клавиш» для выполнения различных операций.
KeyString возвращает комбинацию клавиш для переданного кода.
Ниже мы рассмотрим пример программного назначения клавиатурной комбинации для вызова макроса.
9.4.2. ChangeFileOpenDirectorу — путь для работы с файлами
ChangeFileOpenDirectory позволяет установить директорию, в которой Microsoft Word ищет файлы для открытия. В установленной папке программа будет искать файлы при программном открытии файлов и при вызове окна открытия файлов.
Выбранная директория будет использоваться для открытия файлов по умолчанию лишь до тех пор, пока Word не будет перезапущен.
Например, чтобы установить папку » C:Новые документы » в качестве папки по умолчанию, можно использовать такой код (листинг 9.6.):
Следует отметить, что если мы вызываем метод или свойство объекта Application из макроса Microsoft Word, мы можем опускать вызов Application — то есть, в вышеприведенном примере можно написать так:
9.4.3. CleanString — очистка строк
CleanString очищает переданную строку от непечатаемых и специальных символов, превратив ее в обычный текст. Такой же текст можно получить, если скопировать текст из Microsoft Word в Блокнот, а потом — обратно. Например, с помощью такого кода можно получить очищенную строку из выделенной области документа (листинг 9.7.).
9.4.4. Keyboard — программное переключение раскладки
Keyboard позволяет программно переключать раскладку клавиатуры. При переключении используется идентификатор языковых и клавиатурных установок. Чтобы включить русскую раскладку, можно воспользоваться таким кодом (листинг 9.8.):
Очевидно, что 1049 — это код русского языка. Для включения английской раскладки используйте этот метод с идентификатором 1033.
9.4.5. ListCommands — справка по горячим клавишам
ListCommands это необычный метод — если вызвать его с параметром True (листинг 9.9.) — он создаст новый документ, содержащий таблицу со списком клавиатурных сочетаний, назначенных командам MS Word. Таблица содержит несколько десятков страниц.
9.4.6. NewWindow — копия окна активного документа
NewWindow создает копию окна активного документа. Это может быть полезным например, для того, чтобы вывести один и тот же документ на два монитора при работе с расширенным рабочим столом и т.д. Например, метод можно вызвать так:
При необходимости можно задать, для какого именно документа вы хотите создать копию окна. Однако, это потребует использования других объектов. Например — коллекции Windows , содержащей окна документов. Такой код (листинг 9.11.) создаст одну копию для каждого открытого окна:
Мы не случайно запустили цикл обхода открытых окон в обратном порядке. Дело в том, что иначе будет создано несколько копий одного и того же документа.
В этом примере вам встретились неизвестные ранее свойства Count и Item . Первое обычно содержит количество элементов в коллекции, второе позволяет обращаться к элементам по индексам или именам.
При создании копии после имени документа появляется двоеточие с номером окна, например, «:1» для первого, «:2» для второго и т.д.
9.4.7. OnTime — запуск макросов по расписанию
OnTime позволяет устанавливать таймер, по которому можно запустить макрос в определенное время. Например, чтобы выполнить макрос MyMacros , который хранится в том же документе, что и исполняемый макрос, достаточно выполнить такой код (листинг 9.12.).
Параметр When указывает на время запуска, параметр Name — на имя макроса. Важно, чтобы макрос был доступен как в момент запуска таймера, так и в момент запуска самого макроса. Для того чтобы это условие соблюдалось, желательно хранить макросы, запускаемые по таймеру, в Normal.dotm , в другом глобальном шаблоне, или в том же документе, в котором произошел запуск таймера.
Как видите, мы привели пример лишь для запуска макроса в строго определенное время. А как же быть, если нужно запустить макрос, например, через пятнадцать секунд после выполнения какой-либо процедуры? Ответ прост (листинг 9.13.)
Здесь мы запускаем тот же самый макрос, но уже через 15 секунд после установки таймера. Функция Now имеет тип Date и возвращает текущую дату и время, а функция TimeValue преобразует переданное ей время в формат Date .
Если вы хотите, чтобы какой-то макрос запускался с некоторой периодичностью — установку таймера на запуск этого макроса можно установить в нем. Первый запуск макроса можно произвести вручную или каким-то другим способом (например — по событию приложения, с помощью автоматически выполняемого макроса), а последующие запуски этот макрос будет инициировать самостоятельно.
10.3 Объект Application
Объект Word.Application, запуск нового экземпляра Word, события объекта Word.Application
Объект Application — это само приложение Microsoft Word. Все остальные объекты Word «вложены» в этот объект. Создать этот объект — значит запустить Word на вашем компьютере. Как правило, это нам и надо (если мы создаем в формате Word из другого приложения, например, из Access). Но не забудьте — если вы запускаете Word из другого приложения Office, то необходимо добавить в ваш проект ссылку на библиотеку Microsoft Word 11.0 Object Library.
Код на запуск Word очень прост:
Dim oWord As New Word.Application
Однако, выполнив этот код из другого приложения, вы, скорее всего, даже не заметите, что у вас что-то произошло. Причины просты:
- по умолчанию Word запускается в скрытом окне;
- если в нем не открыт ни один документ, он тут же и закрывается (после того, как завершается создавшая его процедура).
Сделать Word видимым очень просто:
Однако возникает вопрос: а нужно ли его делать видимым? Некоторые знакомые разработчики утверждают, что не нужно. Пусть Word работает в скрытом окне, создавая требуемый документ. Когда пользователю потребуется, он этот документ откроет. Решать вам, но я предпочитаю, чтобы Word все-таки был видимым: во-первых, сразу видны все проблемы при создании документа, а, во-вторых, пользователям почему-то очень нравится, когда у них на глазах открывается Word и начинает печатать строки, которые в противном случае пришлось бы печатать им самим.
Если вы работаете с Word в скрытом окне, не забудьте после выполнения необходимых действий его закрыть (иначе он так и останется в оперативной памяти, видимый только через Task Manager). Для закрытия Word нужно вызвать его метод Quit().
Чтобы Word не закрывался сам собой, в нем достаточно создать новый документ. Подробно об этом будет рассказано в следующем разделе, но самый простой вариант создания нового документа Word выглядит так:
Dim oWord As New Word.Application
Если Word уже открыт, то можно получить на него ссылку, например, при помощи такого кода:
Set oWord = GetObject(,»Word.Application»)
Однако на практике, кроме очень специальных случаев (активизация объектов OLE), такой подход по сравнению с открытием нового экземпляра Word ничего нам не дает. Наоборот, появляется дополнительный риск нечаянно испортить открытый в существующем экземпляре созданный пользователем документ или закрыть существующий экземпляр Word без сохранения пользовательских документов. Поэтому лучше создавать новый экземпляр Word.
Если же ваш код VBA выполняется в Word (то есть Word уже запущен), то объект Application создавать уже не надо. В этой ситуации он будет автоматически доступен в любой момент (чтобы в этом убедиться, достаточно впечатать в окне редактора кода Application и добавить точку). Более того, если не указано, к какому объекту относится то или иное свойство или метод, компилятор VBA в Word автоматически считает, что это свойство или метод принадлежит объекту Application. Поэтому такой код функционально одинаков:
Application.Selection.TypeText «Мой текст»
Selection.TypeText «Мой текст»
Еще один важный момент, который связан с объектом Application в Word. Для этого объекта предусмотрено большое количество удобных в использовании событий (открытие документа, выход из Word, щелчок правой кнопкой мыши, изменение документа, печать документа, сохранение документа и т.п.) Однако по умолчанию все эти события не видны. Чтобы они появились, необходимо в разделе Declarations кода формы (только формы — не модуля!) объявить объект Application с ключевым словом WithEvents, например, так:
Public WithEvents App As Word.Application
В списке объектов у нас появится новый объект App (то есть Application), для которого можно выбрать события и добавлять код в событийные процедуры точно так же, как это мы делаем для формы и элементов управления.
Объект Word Application — свойства-объекты и свойства-коллекции
В данной статье мы рассмотрим свойства объекта Word Application, которые позволяют получить доступ к остальным объектам или коллекциям.
В прошлой статье “Объект Word Application — свойства” я рассказал, что все свойства данного класса можно условно разделить на две категории, и тут мы рассмотрим вторую категорию. По сути, я просто приведу список и для тех объектов, или коллекций, которые уже описаны на блоге я дам ссылку. Конечно, возможно было бы разумнее сначало описать все компоненты, и тут так сказать, выложить некий мини справочник, но это занимает слишком много времени…
Свойства объекта Word Application – вторая категория
Options — Возвращает объект Options, который представляет параметры приложения.
FileDialog — Возвращает объект FileDialog , который представляет собой один экземпляр диалогового окна для файла.
ActiveProtectedViewWindow — Возвращает объект ProtectedViewWindow, представляющий активный защищенный просмотр окна.
ActiveWindow — Возвращает объект Window, представляющий активное окно. Если нет открытого окна, возникает ошибка. Word Application
AddIns — Возвращает коллекцию AddIns, представляющую все доступные надстройки — модули, независимо от того, загружены ли они в настоящее время.
Application — Возвращает объект Application, представляющий приложение Microsoft Word.
Assistance — Возвращает объект Assistance, представляющий просмотра справки.
AutoCaptions — Возвращает коллекцию AutoCaptions, представляющую заголовки, которые автоматически добавляются, когда элементы, такие как таблицы и рисунки, вставляются в документ. Word Application
AutoCorrect — Возвращает объект AutoCorrect, содержащий текущие параметры автозамены.
AutoCorrectEmail — Возвращает объект AutoCorrect, который представляет автоматические корректировки, внесенные в электронные почтовые сообщения.
Bibliography — Возвращает объект Bibliography, представляющий библиографические ссылки, источники, хранящиеся в Microsoft Word, объект Word Application
Browser — Возвращает объект Browser, представляющий инструмент выбора на вертикальной полосе прокрутки.
CaptionLabels — Возвращает коллекцию CaptionLabels, представляющую все доступные метки.
CommandBars — Возвращает коллекцию CommandBars, представляющую строку меню и все панели инструментов.
COMAddIns — Возвращает ссылку на коллекцию COMAddIns, которая представляет все модели компонентных объектов (COM), загруженные в Microsoft Word.
CustomDictionaries — Возвращает объект Dictionaries, представляющий коллекцию активных пользовательских словарей. Word Application.
Dialogs — Возвращает коллекцию Dialogs, представляющий все встроенные диалоговые окна.
Documents — Возвращает коллекцию Documents, которая представляет все открытые документы.
EmailOptions — Возвращает объект EmailOptions, представляющий глобальных настройки электронной почты .
FileConverters — Возвращает коллекцию FileConverters , которая представляет все конверторы файлов , доступные для Microsoft Word.
FindKey — Возвращает объект KeyBinding, представляющий указанную комбинацию клавиш.
FontNames — Возвращает объект FontNames, который включает имена всех доступных шрифтов. Объект Word Application.
HangulHanjaDictionaries — Возвращает коллекцию HangulHanjaConversionDictionaries, представляющую все активные пользовательские словари.
KeyBindings — Возвращает коллекцию KeyBindings, представляющую индивидуальные назначения клавиш, которые включают код ключа, ключевой категорией, и команду.
KeysBoundTo — Возвращает объект KeysBoundTo, который представляет все комбинации клавиш, назначенные указанному элементу.
LandscapeFontNames — Возвращает объект FontNames, который включает имена всех доступных ландшафтных шрифтов. Word Application.
ActiveDocument — Возвращает объект Document, представляющий активный документ. Если нет открытых документов, возникает ошибка.
Languages — Возвращает коллекцию Languages, представляющую языки для проверки правописания.
LanguageSettings — Возвращает объект LanguageSettings, в котором содержится информация о параметрах языка в Microsoft Word.
ListGalleries — Возвращает коллекцию ListGalleries, представляющую галерею из трех списков шаблонов.
MailingLabel — Возвращает объект MailingLabel, представляющий почтовый ярлык.
MailMessage — Возвращает объект MailMessage, представляющий активное электронное сообщение.
NewDocument — Возвращает объект NewFile, представляющий документ в списке на вкладке Новый.
NormalTemplate — Возвращает объект Template, представляющий нормальный шаблон.
OMathAutoCorrect — Возвращает объект OMathAutoCorrect, представляющий параметры работы с уравнениями. Word Application.
PickerDialog — Возвращает объект PickerDialog, которыя обеспечивает функциональность, чтобы выбрать людей или данные в диалоговом окне.
PortraitFontNames — Возвращает объект FontNames, который включает имена всех доступных портретных шрифтов.
ProtectedViewWindows — Возвращает коллекцию ProtectedViewWindows, которая представляет все защищенные просмотры окна.
RecentFiles — Возвращает коллекцию RecentFiles, представляющий наиболее часто используемых файлов.
Selection — Возвращает объект Selection, представляющий выделение или точку вставки курсора.
SmartArtColors — Возвращает объект SmartArtColors, представляющий набор цветовых стилей, которые в настоящее время загружены в приложении.
SmartArtLayouts — Возвращает объект SmartArtLayouts, представляющий набор макетов SmartArt, которые загружены в данный момент в приложении.
SmartArtQuickStyles — Возвращает объект SmartArtQuickStyles, представляющий набор стилей SmartArt, которые в настоящее загружены в приложении. Word Application.
SynonymInfo — Возвращает объект SynonymInfo, содержащий сведения из тезауруса на синонимы и антонимы, или связанные с ними слова и выражений для указанного слова или фразы.
System — Возвращает объект System, предназначенный для обработки системной информации.
TaskPanes — Возвращает коллекцию TaskPanes, представляющую наиболее часто выполняемые задачи в Microsoft Word.
Tasks — Возвращает коллекцию Tasks, представляющую все запущенные приложения.
Templates — Возвращает коллекцию Templates, представляющую все доступные шаблоны — глобальные шаблоны и привязанные открывать документы.
UndoRecord — Возвращает объект UndoRecord, который обеспечивает пользовательскую точку входа в стек отмены.
VBE — Возвращает объект VBE, представляющий редактор Visual Basic.
Windows — Возвращает коллекцию Windows, в которой хранятся все окна документов. Объект Word Application.
XMLNamespaces — Возвращает коллекцию XMLNAMESPACES, которай представляет XML-схеме в библиотеке схем.
Спасибо за внимание. Автор блога Владимир Баталий
Объектная модель MS Word, объект Application
9.1. Объектная модель MS Word
Microsoft Word 2007, как, впрочем, и другие приложения Office, имеет большую объектную модель , в которую входят множество объектов и коллекций. Однако на практике чаще всего используются лишь некоторые из них.
В частности, это следующие:
- Word (Microsoft Word) — чтобы вызывать объекты Microsoft Office Word из других приложений используется объект Word.
- Application (Приложение) — объект, который включает в себя все остальные объекты и коллекции. Сам объект Application включается в объект Word .
- Documents (Документы) — коллекция, которая включает в себя объекты Document (Документ). Объект Document представляет собой документ, с которым вы работаете в редакторе.
- Bookmarks (Закладки) — c помощью объектов этой коллекции можно задавать места в документе, в которые, при автоматическом создании, можно вставлять изменяемые части.
- Paragraphs (Абзацы), Sentences (Предложения), Words (Слова), Characters (Символы), Tables (Таблицы), OMath (Математические формулы), Эти коллекции, содержащие объекты, соответствующие их названиям, могут использоваться для обработки слов документа ( Words ), предложений ( Sentences ), отдельных символов ( Characters ) и т.д.
- Selection (Выделенная область) — представляет собой выделенную область документа или позицию, в которую будет осуществляться вставка очередного символа . Этот объект часто используют при создании простых документов. Однако у него есть существенные недостатки, что делает предпочтительнее использование объекта Range в большинстве случаев.
- Range (Диапазон) — входит в Document и другие объекты, представляет собой диапазон документа, ограниченный начальным и конечным символом.
Работая с объектной моделью MS Word следует понимать, что, например, объекты Document и Selection могут содержать одинаковые коллекции объектов, например, и там и там есть коллекция Characters , в которую входят объекты Character — то есть — символы. Однако в случае с объектом Document мы можем работать с любым символом документа, а в случае с Selection — лишь с символами в пределах выделенной области. Однако, несмотря на различия, и там и там коллекция Characters имеет одинаковые свойства и методы. То же самое касается и других коллекций и объектов.
Давайте начнем с объекта Application и здесь же поговорим об использовании объектных переменных .
9.2. Работа с объектными переменными
Объектные переменные — это переменные, которые хранят ссылки на объекты . Чтобы инициализировать объектную переменную , нужно использовать ключевое слово Set . Например, так (листинг 9.1.):
Здесь вы можете видеть присваивание переменной ссылки на объект Word.Application . Код, подобный этому, нужен в других приложениях Microsoft Office для запуска нового экземпляра MS Word .
Для того чтобы вы могли работать с Microsoft Word из других приложений — подключите библиотеку Microsoft Word 12.0 Object Library . Сделать это можно, открыв в редакторе окно References командой Tools o References .
Немного ниже мы поговорим о том, что можно делать с объектными переменными , а пока сосредоточимся на их объявлении и инициализации.
Как видите, в листинге 9.1 мы не объявляли переменную — мы сразу присвоили ей ссылку на объект . При последующей работе с такой необъявленной объектной переменной , мы не сможем пользоваться подсказкой по свойствам и методам. Вспомните — когда вы набираете в редакторе имя элемента управления и ставите после него точку — вы видите подсказку. Это очень удобно, так как позволяет избежать ошибок и излишних «походов» в справочную систему VBA .
Для того чтобы справка по свойствам и методам работала, объектную переменную надо сначала объявить, а потом присвоить ей ссылку на объект . Например, так (листинг 9.2.):
Ссылку на объект можно присвоить в процессе объявления переменной. Для этого нужно воспользоваться ключевым словом New (листинг 9.3.):
Переменную, объявленную таким образом, мы можем сразу же использовать по назначению. Новый экземпляр объекта будет создан при первом обращении к нему.
О том, как же пользоваться объектными переменными , скорее даже не ими, а объектами, на которые они ссылаются, мы поговорим ниже.
9.3. Объект Application — приложение
Объект Application можно представить в виде приложения Microsoft Word .
Такой код позволит вывести в окно сообщения информацию об имени приложения:
Как видите, здесь мы обратились к свойству Name (Имя) объекта Application . Вот, что будет выведено при его исполнении (рис. 9.1.).
Здесь мы обходимся без объектных переменных , работая с уже существующим объектом. Ведь если этот код исполняется в Microsoft Word , это значит, что сам Microsoft Word уже запущен.
Чтобы упростить обращение к нескольким свойствам объекта, можно воспользоваться оператором With-End With . Этот оператор позволяет обращаться к нескольким свойствам или методам объекта в упрощенной форме. Например, чтобы вывести имя приложения и узнать номер сборки программы нужно воспользоваться таким построением (листинг 9.4.):
Здесь мы использовали объект Application — вместо него может быть любой другой объект или объектная переменная .
Еще один оператор, которым удобно пользоваться при работе с объектами и коллекциями — это For Each…Next .
Например, для вывода в окнах сообщений имен всех открытых документов, можно написать такой код (листинг 9.5.):
Var_Doc — это переменная типа Variant . Коллекция Application.Documents содержит все открытые документы. При каждом проходе цикла в переменную var_Doc записывается ссылка на очередной объект в коллекции.
Чтобы выйти из цикла , можно воспользоваться оператором Exit For .
Сейчас мы кратко опишем важнейшие методы , свойства и события объекта Application .
9.4. Методы объекта Application
9.4.1. BuildKeyCode, KeyString — горячие клавиши
BuildKeyCode возвращает уникальный цифровой код для заданной комбинации клавиш. Используется при назначении «горячих клавиш» для выполнения различных операций.
KeyString возвращает комбинацию клавиш для переданного кода.
Ниже мы рассмотрим пример программного назначения клавиатурной комбинации для вызова макроса.
9.4.2. ChangeFileOpenDirectorу — путь для работы с файлами
ChangeFileOpenDirectory позволяет установить директорию, в которой Microsoft Word ищет файлы для открытия. В установленной папке программа будет искать файлы при программном открытии файлов и при вызове окна открытия файлов.
Выбранная директория будет использоваться для открытия файлов по умолчанию лишь до тех пор, пока Word не будет перезапущен.
Например, чтобы установить папку » C:Новые документы » в качестве папки по умолчанию, можно использовать такой код (листинг 9.6.):
Следует отметить, что если мы вызываем метод или свойство объекта Application из макроса Microsoft Word, мы можем опускать вызов Application — то есть, в вышеприведенном примере можно написать так:
9.4.3. CleanString — очистка строк
CleanString очищает переданную строку от непечатаемых и специальных символов, превратив ее в обычный текст. Такой же текст можно получить, если скопировать текст из Microsoft Word в Блокнот, а потом — обратно. Например, с помощью такого кода можно получить очищенную строку из выделенной области документа (листинг 9.7.).
9.4.4. Keyboard — программное переключение раскладки
Keyboard позволяет программно переключать раскладку клавиатуры. При переключении используется идентификатор языковых и клавиатурных установок. Чтобы включить русскую раскладку, можно воспользоваться таким кодом (листинг 9.8.):
Очевидно, что 1049 — это код русского языка. Для включения английской раскладки используйте этот метод с идентификатором 1033.
9.4.5. ListCommands — справка по горячим клавишам
ListCommands это необычный метод — если вызвать его с параметром True (листинг 9.9.) — он создаст новый документ, содержащий таблицу со списком клавиатурных сочетаний, назначенных командам MS Word. Таблица содержит несколько десятков страниц.
9.4.6. NewWindow — копия окна активного документа
NewWindow создает копию окна активного документа. Это может быть полезным например, для того, чтобы вывести один и тот же документ на два монитора при работе с расширенным рабочим столом и т.д. Например, метод можно вызвать так:
При необходимости можно задать, для какого именно документа вы хотите создать копию окна. Однако, это потребует использования других объектов. Например — коллекции Windows , содержащей окна документов. Такой код (листинг 9.11.) создаст одну копию для каждого открытого окна:
Мы не случайно запустили цикл обхода открытых окон в обратном порядке. Дело в том, что иначе будет создано несколько копий одного и того же документа.
В этом примере вам встретились неизвестные ранее свойства Count и Item . Первое обычно содержит количество элементов в коллекции, второе позволяет обращаться к элементам по индексам или именам.
При создании копии после имени документа появляется двоеточие с номером окна, например, «:1» для первого, «:2» для второго и т.д.
9.4.7. OnTime — запуск макросов по расписанию
OnTime позволяет устанавливать таймер, по которому можно запустить макрос в определенное время. Например, чтобы выполнить макрос MyMacros , который хранится в том же документе, что и исполняемый макрос, достаточно выполнить такой код (листинг 9.12.).
Параметр When указывает на время запуска, параметр Name — на имя макроса. Важно, чтобы макрос был доступен как в момент запуска таймера, так и в момент запуска самого макроса. Для того чтобы это условие соблюдалось, желательно хранить макросы, запускаемые по таймеру, в Normal.dotm , в другом глобальном шаблоне, или в том же документе, в котором произошел запуск таймера.
Как видите, мы привели пример лишь для запуска макроса в строго определенное время. А как же быть, если нужно запустить макрос, например, через пятнадцать секунд после выполнения какой-либо процедуры? Ответ прост (листинг 9.13.)
Здесь мы запускаем тот же самый макрос, но уже через 15 секунд после установки таймера. Функция Now имеет тип Date и возвращает текущую дату и время, а функция TimeValue преобразует переданное ей время в формат Date .
Если вы хотите, чтобы какой-то макрос запускался с некоторой периодичностью — установку таймера на запуск этого макроса можно установить в нем. Первый запуск макроса можно произвести вручную или каким-то другим способом (например — по событию приложения, с помощью автоматически выполняемого макроса), а последующие запуски этот макрос будет инициировать самостоятельно.
Использование COM-объекта Word.Application для программной отрисовки таблиц и сборки документа
Опубликовано:
17 октября 2012 в 10:10
История вопроса
Необходимо печатать конверты по заданному макету. Задача довольно простая, когда мы заранее знаем, что необходимо печатать. Был создан интегрированный RTF-отчет. Посмотрев на него, пришли к выводу, что такой вариант будет недостаточно гибким, ведь почтовые конверты бывают разные, при условии, что наши организации закупают их не централизовано, с печатью могут возникнуть проблемы.
Часть I. Индекс.
Был выбран путь формирование отчета из макета. Все текстовые поля замечательно проставляются с помощью макропеременных, но появляется загвоздка в формировании индекса. В RTF-отчете он формировался с помощью таблицы. Выбирая разные стили границ, мы можем рисовать цифры. Можно было бы найти какой-нибудь подходящий шрифт, но его надо было бы устанавливать на все компьютеры, с которых возможна печать конвертов.
Посмотрели на готовый результат RTF-отчета с пустым индексом, сохранили его как docx, занесли в систему и обозвали макетом. Лишнее убрали, нужное добавили и сделали генерацию документа. И вот отчет уже почти готов.
Осталось нарисовать такие цифры:
В справке по VBA можно найти значения перечисления типа границы (wdBorderType). В соответствии с этими значениями создаем список соответствий, именем которого является цифра, значением – массив границ, формирующих число.
Приступаем к заполнению.
Часть II. Сборка единого документа.
Пожалуй, более полезная и распространенная, при этом, значительно более короткая часть изысканий в объектной модели Word.Application.
Рисование в таблице, как оказалось, не единственное действие, для которого нам понадобился данный COM-объект. В RTF-отчете, с помощью тегов, можно разбивать документ на страницы. При генерации документов из макета, их придется склеивать средствами, предоставляемыми COM.
GOTO_PAGE_ITEM – перечисление wdGoToItem. Определяет тип элемента для перехода. В нашем случае указываем, что перемещаемся по страницам.
GOTO_LAST_PAGE_DIRECTION – перечисление wdGoToDirection. Указывает направление перемещения. Для нас это последний элемент.
Эти перечисления указывают, что надо взять содержимое, находящееся на последней странице. Туда мы и вставляем новую информацию. Если бы эта страница имела бы какой-нибудь контент, он был бы заменен новой информацией. Если бы надо было добавить только подготовленную текстовую информацию, то можно было бы использовать метод InsertAfter для всего содержимого документа, но у нас во втором документе находится несколько более комплексная информация.
Для справки.
Более подробную информацию по данному объекту можно найти в MSDN и справке по VBA.