Аннотация: Лекция посвящена описанию объектной модели 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.):
Set obj_NewWord = Word.Application
Листинг
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.):
Dim obj_NewWord As Word.Application Set obj_NewWord = Word.Application
Листинг
9.2.
Предварительное объявление объектной переменной
Ссылку на объект можно присвоить в процессе объявления переменной. Для этого нужно воспользоваться ключевым словом New (листинг 9.3.):
Dim obj_NewWord As New Word.Application
Листинг
9.3.
Ключевое слово New при объявлении переменной
Переменную, объявленную таким образом, мы можем сразу же использовать по назначению. Новый экземпляр объекта будет создан при первом обращении к нему.
О том, как же пользоваться объектными переменными, скорее даже не ими, а объектами, на которые они ссылаются, мы поговорим ниже.
9.3. Объект Application — приложение
09-01-With For Each.docm — пример к п. 9.3.
Объект Application можно представить в виде приложения Microsoft Word.
Такой код позволит вывести в окно сообщения информацию об имени приложения:
Как видите, здесь мы обратились к свойству Name (Имя) объекта Application. Вот, что будет выведено при его исполнении (рис. 9.1.).
Рис.
9.1.
Свойство Name объекта Application
Здесь мы обходимся без объектных переменных, работая с уже существующим объектом. Ведь если этот код исполняется в Microsoft Word, это значит, что сам Microsoft Word уже запущен.
Чтобы упростить обращение к нескольким свойствам объекта, можно воспользоваться оператором With-End With. Этот оператор позволяет обращаться к нескольким свойствам или методам объекта в упрощенной форме. Например, чтобы вывести имя приложения и узнать номер сборки программы нужно воспользоваться таким построением (листинг 9.4.):
With Application MsgBox .Name MsgBox .Build End With
Листинг
9.4.
Оператор With — End With
Здесь мы использовали объект Application — вместо него может быть любой другой объект или объектная переменная.
Еще один оператор, которым удобно пользоваться при работе с объектами и коллекциями — это For Each…Next.
Например, для вывода в окнах сообщений имен всех открытых документов, можно написать такой код (листинг 9.5.):
Dim var_Doc For Each var_Doc In Application.Documents MsgBox var_Doc.Name Next var_Doc
Листинг
9.5.
Оператор For Each — Next
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.ChangeFileOpenDirectory ("C:Новые документы")
Листинг
9.6.
Установка новой папки по умолчанию
Следует отметить, что если мы вызываем метод или свойство объекта Application из макроса Microsoft Word, мы можем опускать вызов Application — то есть, в вышеприведенном примере можно написать так:
ChangeFileOpenDirectory ("C:Новые документы")
9.4.3. CleanString — очистка строк
CleanString очищает переданную строку от непечатаемых и специальных символов, превратив ее в обычный текст. Такой же текст можно получить, если скопировать текст из Microsoft Word в Блокнот, а потом — обратно. Например, с помощью такого кода можно получить очищенную строку из выделенной области документа (листинг 9.7.).
str_Clean = Application.CleanString(Selection.Text)
Листинг
9.7.
Очистка строки
9.4.4. Keyboard — программное переключение раскладки
Keyboard позволяет программно переключать раскладку клавиатуры. При переключении используется идентификатор языковых и клавиатурных установок. Чтобы включить русскую раскладку, можно воспользоваться таким кодом (листинг 9.8.):
Application.Keyboard 1049
Листинг
9.8.
Переключение на русскую раскладку клавиатуры
Очевидно, что 1049 — это код русского языка. Для включения английской раскладки используйте этот метод с идентификатором 1033.
9.4.5. ListCommands — справка по горячим клавишам
ListCommands это необычный метод — если вызвать его с параметром True (листинг 9.9.) — он создаст новый документ, содержащий таблицу со списком клавиатурных сочетаний, назначенных командам MS Word. Таблица содержит несколько десятков страниц.
Application.ListCommands True
Листинг
9.9.
Вывод информации о горячих клавишах
9.4.6. NewWindow — копия окна активного документа
09-02-New Window.docm — пример к п. 9.4.6.
NewWindow создает копию окна активного документа. Это может быть полезным например, для того, чтобы вывести один и тот же документ на два монитора при работе с расширенным рабочим столом и т.д. Например, метод можно вызвать так:
Application.NewWindow
Листинг
9.10.
Создание копии окна активного документа
При необходимости можно задать, для какого именно документа вы хотите создать копию окна. Однако, это потребует использования других объектов. Например — коллекции Windows, содержащей окна документов. Такой код (листинг 9.11.) создаст одну копию для каждого открытого окна:
For i = Application.Windows.Count To 1 Step -1 Application.Windows.Item(i).NewWindow Next i
Листинг
9.11.
Создание копии для каждого открытого окна
Мы не случайно запустили цикл обхода открытых окон в обратном порядке. Дело в том, что иначе будет создано несколько копий одного и того же документа.
В этом примере вам встретились неизвестные ранее свойства Count и Item. Первое обычно содержит количество элементов в коллекции, второе позволяет обращаться к элементам по индексам или именам.
При создании копии после имени документа появляется двоеточие с номером окна, например, «:1» для первого, «:2» для второго и т.д.
9.4.7. OnTime — запуск макросов по расписанию
09-03-OnTime.docm — пример к п. 9.4.7.
OnTime позволяет устанавливать таймер, по которому можно запустить макрос в определенное время. Например, чтобы выполнить макрос MyMacros, который хранится в том же документе, что и исполняемый макрос, достаточно выполнить такой код (листинг 9.12.).
Application.OnTime When:="08:37:00", Name:="MyMacros"
Листинг
9.12.
Установка таймера запуска макроса
Параметр When указывает на время запуска, параметр Name — на имя макроса. Важно, чтобы макрос был доступен как в момент запуска таймера, так и в момент запуска самого макроса. Для того чтобы это условие соблюдалось, желательно хранить макросы, запускаемые по таймеру, в Normal.dotm, в другом глобальном шаблоне, или в том же документе, в котором произошел запуск таймера.
Как видите, мы привели пример лишь для запуска макроса в строго определенное время. А как же быть, если нужно запустить макрос, например, через пятнадцать секунд после выполнения какой-либо процедуры? Ответ прост (листинг 9.13.)
Application.OnTime _ When:=Now + TimeValue("00:00:15"), _ Name:="MyMacros"
Листинг
9.13.
Запуск макроса по расписанию
Здесь мы запускаем тот же самый макрос, но уже через 15 секунд после установки таймера. Функция Now имеет тип Date и возвращает текущую дату и время, а функция TimeValue преобразует переданное ей время в формат Date.
Если вы хотите, чтобы какой-то макрос запускался с некоторой периодичностью — установку таймера на запуск этого макроса можно установить в нем. Первый запуск макроса можно произвести вручную или каким-то другим способом (например — по событию приложения, с помощью автоматически выполняемого макроса), а последующие запуски этот макрос будет инициировать самостоятельно.
Объектная модель
Microsoft Word, объекты
Application, Document, Selection, Range, Bookmark
Общая структура объектов Word выглядит
так, как показано на рис. 10.1.
Рис. 10.1 Так выглядят главные объекты
Word
Но пугаться совсем не стоит — большая
часть из этих сотен объектов никогда
вам не понадобится. На практике для
решения большинства программных задач
достаточно знать всего лишь пять объектов
(с сопутствующими коллекциями):
-
объект Application;
-
объект Document (с коллекцией Documents);
-
объект Selection;
-
объект Range;
-
объект Bookmark (с коллекцией Bookmarks).
Ниже все эти самые важные объекты будут
подробно рассмотрены. Для каждого
объекта вначале будут рассмотрены общие
моменты, связанные с ними, например, в
каких ситуациях они нужны и как при
помощи них выполнять те или иные действия.
Поскольку наиболее часто встречающаяся
задача программирования в Word — это
создание документа (на основе шаблона)
и запись в нужное место документа
необходимой информации, то акцент будет
сделан использовании соответствующих
объектов для решении этой задачи.
Кроме того, для каждого объекта будут
перечислены самые важные свойства,
методы и события с кратким их описанием.
Эта часть добавлена по просьбе слушателей
учебного курса по программированию в
Office, поскольку многие из них не владеют
английским так, чтобы свободно читать
документацию. Если вы читаете эту книгу
подряд, то эти справочные части можно
просто пропускать.
5.3 Объект Application
5.3.1 Как работать с объектом 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 видимым очень просто:
oWord.Visible = True
Однако возникает вопрос: а нужно ли его
делать видимым? Некоторые знакомые
разработчики утверждают, что не нужно.
Пусть Word работает в скрытом окне, создавая
требуемый документ. Когда пользователю
потребуется, он этот документ откроет.
Решать вам, но я предпочитаю, чтобы Word
все-таки был видимым: во-первых, сразу
видны все проблемы при создании документа,
а, во-вторых, пользователям почему-то
очень нравится, когда у них на глазах
открывается Word и начинает печатать
строки, которые в противном случае
пришлось бы печатать им самим.
Если вы работаете с Word в скрытом окне,
не забудьте после выполнения необходимых
действий его закрыть (иначе он так и
останется в оперативной памяти, видимый
только через Task Manager). Для закрытия Word
нужно вызвать его метод Quit().
Чтобы Word не закрывался сам собой, в нем
достаточно создать новый документ.
Подробно об этом будет рассказано в
следующем разделе, но самый простой
вариант создания нового документа Word
выглядит так:
Dim oWord As New Word.Application
oWord.Visible = True
oWord.Documents.Add
Если 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), для которого
можно выбрать события и добавлять код
в событийные процедуры точно так же,
как это мы делаем для формы и элементов
управления.
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
- #
- #
- #
18.02.2016194.27 Кб44V.docx
- #
- #
- #
- #
- #
- #
- #
- #
Создание нового экземпляра приложения Word из кода VBA Excel или подключение к открытому для работы с документами. Функции CreateObject и GetObject.
Работа с Word из кода VBA Excel
Часть 1. Управление приложением Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Создание объекта Word.Application
Экземпляр приложения Word необходим для того, чтобы с его помощью создавать новые документы или открывать существующие для редактирования из кода VBA Excel.
Создать новый экземпляр объекта Word.Application можно при помощи раннего или позднего связывания, используя при позднем связывании функцию CreateObject. Подключиться к открытому экземпляру приложения Word можно только при помощи позднего связывания, используя функцию GetObject.
Раннее связывание приложения Word
Создание нового экземпляра Word.Application и присвоение ссылки на него переменной myWord:
‘Создание экземпляра приложения Word ‘с ранней привязкой одной строкой Dim myWord As New Word.Application ‘Создание экземпляра приложения Word ‘с ранней привязкой двумя строками Dim myWord As Word.Application Set myWord = New Word.Application |
Для раннего связывания переменной с объектом Word.Application необходимо подключить в редакторе VBA Excel ссылку на библиотеку Microsoft Word Object Library, если она не подключена. Подключается ссылка в окне «References VBAproject», перейти в которое можно через главное меню редактора: Tools–>References…
Раннее связывание позволяет при написании кода использовать лист подсказок для выбора и вставки свойств и методов привязанных объектов (Auto List Members). Если проект VBA Excel создается на заказ, то, после его завершения, раннее связывание следует заменить на позднее, так как на компьютере пользователя может не оказаться нужной библиотеки, и код работать не будет.
Позднее связывание приложения Word
Создание нового экземпляра Word.Application с помощью функции CreateObject и присвоение ссылки на него переменной myWord:
Dim myWord As Object Set myWord = CreateObject(«Word.Application») |
Присвоение переменной myWord ссылки на открытый экземпляр приложения Word с помощью функции GetObject:
Dim myWord As Object Set myWord = GetObject(, «Word.Application») |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Чтобы ее избежать, следует предусмотреть создание нового экземпляра Word.Application с помощью функции CreateObject, если открытое приложение не будет найдено (смотрите пример 3).
В программы VBA Excel, работающие с Word, следует включать обработчик ошибок.
Закрытие объекта Word.Application
Новый экземпляр приложения Word открывается в фоновом режиме. Если необходимо его отобразить на экране перед завершением программы, используйте следующий код:
‘отображаем приложение Word myWord.Visible = True ‘освобождаем переменную от ссылки Set myWord = Nothing |
Если перед завершением процедуры VBA Excel необходимо приложение Word закрыть, используйте метод Quit:
‘закрываем приложение Word myWord.Quit ‘освобождаем переменную от ссылки Set myWord = Nothing |
Если переменная не содержит ссылку на приложение (myWord = Nothing), метод Quit возвратит ошибку. Чтобы этого не произошло, перед применением метода Quit необходимо проверить наличие ссылки в переменной myWord (смотрите пример 3).
Пример 1
Создаем новый экземпляр объекта Word.Application с ранним связыванием и отображаем его на экране:
Sub Primer1() Dim myWord As New Word.Application ‘———- ‘блок операторов для создания, открытия ‘и редактирования документов Word ‘———- myWord.Visible = True Set myWord = Nothing End Sub |
Запустите код примера 1 на выполнение. Вы увидите появившийся на панели задач ярлык приложения Word. Перейдите на него и закройте приложение вручную.
Пример 2
Создаем новый экземпляр объекта Word.Application с поздним связыванием, отображаем его на экране, останавливаем программу и наблюдаем закрытие приложения методом Quit:
Sub Primer2() Dim myWord As Object Set myWord = CreateObject(«Word.Application») ‘———- ‘блок операторов для создания, открытия ‘и редактирования документов Word ‘———- myWord.Visible = True MsgBox «Остановка программы» myWord.Quit Set myWord = Nothing End Sub |
Запустите код примера 2 на выполнение. Закройте информационное окно MsgBox и смотрите, как исчезнет с панели задач ярлык приложения Word, созданного перед остановкой кода.
Пример 3
Пытаемся создать ссылку на открытый экземпляр приложения Word с помощью функции GetObject, а если открытого экземпляра нет, создаем новый с помощью функции CreateObject:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
Sub Primer3() Dim myWord As Object On Error Resume Next Set myWord = GetObject(, «Word.Application») If myWord Is Nothing Then Set myWord = CreateObject(«Word.Application») End If On Error GoTo Instr ‘———- ‘блок операторов для создания, открытия ‘и редактирования документов Word ‘———- myWord.Visible = True Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myWord = Nothing End If End Sub |
Строка On Error Resume Next
передаст управление следующему оператору, если открытого экземпляра программы Word не существует, и выполнение функции GetObject приведет к ошибке. В этом случае будет создан новый экземпляр Word.Application с помощью функции CreateObject.
В код добавлен обработчик ошибок On Error GoTo Instr
, который поможет корректно завершить программу при возникновении ошибки. А также он позволит во время тестирования не наплодить большое количество ненужных экземпляров приложения Word. Проверяйте их наличие по Диспетчеру задач (Ctrl+Shift+Esc) и удаляйте лишние.
Строка Exit Sub
завершит процедуру, если она прошла без ошибок. В случае возникновения ошибки, будет выполнен код после метки Instr:
.
Permalink
main
{{ refName }}
default
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
-
Go to file
-
Copy path
-
Copy permalink
Cannot retrieve contributors at this time
Application object (Word)
Remarks
Events
Methods
Properties
See also
274 lines (254 sloc)
13.8 KB
Raw
Blame
Open in GitHub Desktop
-
Open with Desktop
-
View raw
-
Copy raw contents
-
View blame
title | keywords | f1_keywords | ms.prod | api_name | ms.assetid | ms.date | ms.localizationpriority | description |
---|---|---|---|---|---|---|---|---|
Application object (Word) |
vbawd10.chm2416 |
vbawd10.chm2416 |
word |
Word.Application |
d1cf6f8f-4e88-bf01-93b4-90a83f79cb44 |
06/08/2017 |
medium |
Application object (Word) |
Application object (Word)
Represents the Microsoft Word application. The Application object includes properties and methods that return top-level objects. For example, the ActiveDocument property returns a Document object.
Remarks
Use the Application property to return the Application object. The following example displays the user name for Word.
MsgBox Application.UserName
Many of the properties and methods that return the most common user-interface objects—such as the active document (ActiveDocument property)—can be used without the Application object qualifier. For example, instead of writing Application.ActiveDocument.PrintOut
, you can write ActiveDocument.PrintOut
. Properties and methods that can be used without the Application object qualifier are considered «global.» To view the global properties and methods in the Object Browser, click <globals>
at the top of the list in the Classes box. (Also see the Global object.)
Remarks
To use Automation (formerly OLE Automation) to control Word from another application, use the Microsoft Visual Basic CreateObject or GetObject function to return a Word Application object. The following Microsoft Excel example starts Word (if it is not already running) and opens an existing document.
Set wrd = GetObject(, "Word.Application") wrd.Visible = True wrd.Documents.Open "C:My DocumentsTemp.doc" Set wrd = Nothing
Events
- DocumentBeforeClose
- DocumentBeforePrint
- DocumentBeforeSave
- DocumentChange
- DocumentOpen
- DocumentSync
- EPostageInsert
- EPostageInsertEx
- EPostagePropertyDialog
- MailMergeAfterMerge
- MailMergeAfterRecordMerge
- MailMergeBeforeMerge
- MailMergeBeforeRecordMerge
- MailMergeDataSourceLoad
- MailMergeDataSourceValidate
- MailMergeDataSourceValidate2
- MailMergeWizardSendToCustom
- MailMergeWizardStateChange
- NewDocument
- ProtectedViewWindowActivate
- ProtectedViewWindowBeforeClose
- ProtectedViewWindowBeforeEdit
- ProtectedViewWindowDeactivate
- ProtectedViewWindowOpen
- ProtectedViewWindowSize
- Quit
- WindowActivate
- WindowBeforeDoubleClick
- WindowBeforeRightClick
- WindowDeactivate
- WindowSelectionChange
- WindowSize
- XMLSelectionChange
- XMLValidationError
Methods
- Activate
- AddAddress
- AutomaticChange
- BuildKeyCode
- CentimetersToPoints
- ChangeFileOpenDirectory
- CheckGrammar
- CheckSpelling
- CleanString
- CompareDocuments
- DDEExecute
- DDEInitiate
- DDEPoke
- DDERequest
- DDETerminate
- DDETerminateAll
- DefaultWebOptions
- GetAddress
- GetDefaultTheme
- GetSpellingSuggestions
- GoBack
- GoForward
- Help
- HelpTool
- InchesToPoints
- Keyboard
- KeyboardBidi
- KeyboardLatin
- KeyString
- LinesToPoints
- ListCommands
- LoadMasterList
- LookupNameProperties
- MergeDocuments
- MillimetersToPoints
- Move
- NewWindow
- NextLetter
- OnTime
- OrganizerCopy
- OrganizerDelete
- OrganizerRename
- PicasToPoints
- PixelsToPoints
- PointsToCentimeters
- PointsToInches
- PointsToLines
- PointsToMillimeters
- PointsToPicas
- PointsToPixels
- PrintOut
- ProductCode
- PutFocusInMailHeader
- Quit
- Repeat
- ResetIgnoreAll
- Resize
- Run
- ScreenRefresh
- SetDefaultTheme
- ShowClipboard
- ShowMe
- SubstituteFont
- ToggleKeyboard
Properties
- ActiveDocument
- ActiveEncryptionSession
- ActivePrinter
- ActiveProtectedViewWindow
- ActiveWindow
- AddIns
- Application
- ArbitraryXMLSupportAvailable
- Assistance
- AutoCaptions
- AutoCorrect
- AutoCorrectEmail
- AutomationSecurity
- BackgroundPrintingStatus
- BackgroundSavingStatus
- Bibliography
- BrowseExtraFileTypes
- Browser
- Build
- CapsLock
- Caption
- CaptionLabels
- ChartDataPointTrack
- CheckLanguage
- COMAddIns
- CommandBars
- Creator
- CustomDictionaries
- CustomizationContext
- DefaultLegalBlackline
- DefaultSaveFormat
- DefaultTableSeparator
- Dialogs
- DisplayAlerts
- DisplayAutoCompleteTips
- DisplayDocumentInformationPanel
- DisplayRecentFiles
- DisplayScreenTips
- DisplayScrollBars
- Documents
- DontResetInsertionPointProperties
- EmailOptions
- EmailTemplate
- EnableCancelKey
- FeatureInstall
- FileConverters
- FileDialog
- FileValidation
- FindKey
- FocusInMailHeader
- FontNames
- HangulHanjaDictionaries
- Height
- International
- IsObjectValid
- IsSandboxed
- KeyBindings
- KeysBoundTo
- LandscapeFontNames
- Language
- Languages
- LanguageSettings
- Left
- ListGalleries
- MacroContainer
- MailingLabel
- MailMessage
- MailSystem
- MAPIAvailable
- MathCoprocessorAvailable
- MouseAvailable
- Name
- NewDocument
- NormalTemplate
- NumLock
- OMathAutoCorrect
- OpenAttachmentsInFullScreen
- Options
- Parent
- Path
- PathSeparator
- PickerDialog
- PortraitFontNames
- PrintPreview
- ProtectedViewWindows
- RecentFiles
- RestrictLinkedStyles
- ScreenUpdating
- Selection
- SensitivityLabelPolicy
- ShowAnimation
- ShowStartupDialog
- ShowStylePreviews
- ShowVisualBasicEditor
- SmartArtColors
- SmartArtLayouts
- SmartArtQuickStyles
- SpecialMode
- StartupPath
- StatusBar
- SynonymInfo
- System
- TaskPanes
- Tasks
- Templates
- Top
- UndoRecord
- UsableHeight
- UsableWidth
- UserAddress
- UserControl
- UserInitials
- UserName
- VBE
- Version
- Visible
- Width
- Windows
- WindowState
- WordBasic
- XMLNamespaces
See also
- Word Object Model Reference
[!includeSupport and feedback]
Объектная модель 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 .
Если вы хотите, чтобы какой-то макрос запускался с некоторой периодичностью — установку таймера на запуск этого макроса можно установить в нем. Первый запуск макроса можно произвести вручную или каким-то другим способом (например — по событию приложения, с помощью автоматически выполняемого макроса), а последующие запуски этот макрос будет инициировать самостоятельно.
Благин Константин
Программирование как созидательный процесс.
Использование шаблонов Word в 1С
Использование шаблонов Word в 1С
В работе программиста 1С, данный функционал требуется крайне редко, хотя благодаря нему можно решать довольно сложные задачи с динамическими и не постоянными печатными формами. При реализации данной задачи, работа по созданию шаблонов Word и расстановке закладок в шаблоне Word возлагается на пользователей 1C.
В данном примере будет показано, как используя механизмы 1С и документа Word в качестве шаблона, можно создать печатную форму для вывода данных, пользователям программы 1С.
Создадим шаблон на основе документа Word для 1С. Сначала необходимо включить показ закладок для более удобной работы с документом:
Использование шаблонов Word в 1С
Использование шаблонов Word в 1С
Далее необходимо в файл шаблона для 1С, добавить текст и пару закладок. Закладка добавляется через меню «Вставка» — «Закладка». Нужно выделить текст закладки, скопировать его, открыть меню «Вставка — Закладка», вставить скопированный текст закладки и нажать «Добавить»:
Установка закладки, шаблон Word для 1С
В результат запуска внешней обработки 1С по формированию печатной формы на основе шаблона в виде файла Word, мы получим следующий результат:
Результат использования шаблонов Word в 1С
Информацию по методам COM объекта Word, а так же дополнительные данные можно узнать из MSDN.
Дополнение к заметке Использование шаблонов Word в 1С
Выражаю благодарность, всем тем, кто комментирует запись, благодаря вам, материал дополняется новыми данными и будет полезен более широкому кругу посетителей.
1. А как поменять размер шрифта во вставляемом тексте?
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
2. Картинки есть возможность выгружать в шаблон?
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:
3. При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
Может попробовать изменить путь на: «C:Шаблон.docx».
4. Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
Предполагаю, что метод Записать( , ) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».
5. У меня в документе есть ссылки на файлы которые расположены на сетевом диске. Как в шаблоне сделать гиперссылку на эти файлы?
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
Соответственно код для 1С следующий:
Навигация по записям
Использование шаблонов Word в 1С : 29 комментариев
А как поменять размер шрифта во вставляемом тексте?
- Благин Константин Автор записи 27.11.2016 в 16:02
Достаточно изменить размер шрифта закладки, в шаблоне. А вот, если необходимо динамически менять размерность, тогда:
Добрый день, подскажите, пожалуйста, картинки есть возможность выгружать в шаблон?
- Благин Константин Автор записи 30.11.2016 в 15:03
Да, конечно. Примеры для C# и VB описаны по ссылке: https://msdn.microsoft.com/ru-ru/library/ms178792.aspx, а для 1С код будет следующий:
Спасибо, будем пробовать.
Снова, здравствуйте.
Вопрос по шаблонам. Попросили перенести шаблоны, написанные в Word из ЗиК 1.0 в ЗиК 3.0.
Как я понял — не перенесутся, нужно новые писать. Поскольку, учусь, то это даже на руку. За образец решил взять Ваш и начать разбираться. Но Ваш НЕ ГРУЗИТСЯ. Пишет:
Невозможно подключить дополнительную обработку из файла.
Возможно, она не подходит для этой версии программы.
Метод объекта не обнаружен (СведенияОВнешнейОбработке)
Кстати, когда пытаюсь загрузить шаблоны из 1.0, то пишет тоже самое.
Можете что-нибудь посоветовать?
- Благин Константин Автор записи 04.12.2016 в 15:29
Данная ошибка, появляется, потому что обработка создана просто как внешняя, без возможности подключения к 1С. Если вы хотите подключить какую либо обработку, в режиме «1С:Предприятие», тогда в модуле обработки необходимо вставить определенный код, более подробно описано по следующим ссылкам:
Добавление дополнительных отчетов и обработок в тонком клиенте.
Создание нового отчета или обработки
youtube: Создание внешней обработки
А насчет переноса могу посоветовать, проанализировать, как в ЗиК 1.0 производилось заполнение шаблона. Найти участки кода, которые за это отвечают, попробовать сначала перенести их во внешнюю обработку, для тестирования. Как вариант, сам шаблон можно положить в макеты (тип макета «Active document») этой обработки и уже оттуда загружать его.
Здесь есть несколько нюансов, механизм заполнения шаблонов и сами шаблоны, типовые, доработанные или самописные? Объекты которые используются для заполнения в ЗиК 1.0 могут отсутствовать в ЗиК 3.0 или иметь другое наименование. Плюс ко всему, необходимо еще учесть, что ЗиК 1.0 это обычное приложение, использующее толстый клиент, а ЗиК 3.0 управляемое приложение, использующее тонкий клиент, соответственно здесь тоже присутствует своя специфика работы.
Да и еще, в ЗиК 3.0 как мне кажется должен быть свой механизм шаблонов, к сожалению, не работал с этими конфигурациями, но вероятно там уже есть механизм аналогичный ЗиК 1.0. Так что может, будет достаточно только добавить шаблон.
Спасибо за быстрый и подробный ответ.
Попробую разобраться.
Шаблоны у нас самописные.
Про собственный механизм шаблонов, даже не слышал. Попробую поискать в сети.
Ваша ссылка помогла.
Добавил две функции и одну процедуру, и Ваша обработка заработала.
Свою, похоже , придётся рисовать с нуля.
При выполнении кода: ОбъектВорд.Documents.Add(«C:/Шаблон.docx») (туда я поместил Ваш документ) получаю ошибку : «Ошибка при вызове метода контекста (Add)» в чем может быть причина?
- Благин Константин Автор записи 05.04.2017 в 07:59
Может попробовать изменить путь на: «C:Шаблон.docx»
Помогло. Спасибо.
Подскажите пожалуйста еще почему при сохранении макета типа active document в файл word кодом:
ОбработкаОбъект = РеквизитФормыВЗначение(«Объект»);
Макет = ОбработкаОбъект.ПолучитьМакет(«ШаблонПисьмаПросрочка»);
ИмяФайла = КаталогВременныхФайлов() + «»файл.doc»;
Макет.Записать(ИмяФайла);
Я получаю вместо нормального документа вот такой http://prntscr.com/eshgjk
- Благин Константин Автор записи 05.04.2017 в 19:56
Предполагаю, что метод Записать( , ) по умолчанию, записывает файл в формате MXL. Попробуйте вторым параметром установить значение: ТипФайлаТабличногоДокумента.DOCX, более подробно описано в «Синтакс-помощнике».
Константин,
У меня в документе есть ссылки на файлы которые расположены на сетевом диске.
Как в шаблоне сделать гиперссылку на эти файлы?
- Благин Константин Автор записи 31.07.2017 в 21:27
Здравствуйте, Руслан.
Интересный вопрос, если попробовать сделать запись макроса и посмотреть результат, то в Visual Basic добавление гиперссылки будет выглядеть следующим образом:
Соответственно код для 1С следующий:
я хочу заполнить шаблон с помощью заполнения пользовательской формы. как получить значение,выбранное из списка, если тип поля СправочникСсылка.НазваниеСправочника?
- Благин Константин Автор записи 07.06.2018 в 19:03
Предполагаю заполнение производите на стороне клиента, тогда можете сразу обратиться к элементу формы или объекта.
Здравствуйте. Попросили обновить шаблоны договоров для печати. Обновила, но теперь при печати выводит ошибку, что не удалось сформировать элемент управления ActiveX. С чем это может быть связано?
- Благин Константин Автор записи 28.06.2018 в 11:30
Ирина, для ответа необходима дополнительная информация:
1. Какая конфигурация используется?
2. Каким образом происходило обновление шаблонов?
3. Ошибка выходит при формировании документа на основе данных и шаблона или при отправке на печать?
Доброго дня. Прошу помочь с задачей вставки в документ Word, ранее записанного файла HTML (из 1С сохранил на диск, браузером файл открывается нормально — отображается НЕ как текст)., а в документе Word формируется как текст не конвертированный.
Вставляю так
Word = ПечатнаяФорма.COMСоединение;
Select = Word.Selection;
Docum = Word.Application.Documents(1);
Select.InsertFile(«C:Temp1.html»);
- Благин Константин Автор записи 19.07.2019 в 13:32
В данный момент не пользуюсь Office, попробуйте использовать Selection.PasteAndFormat как было подсказано здесь: https://toster.ru/q/164995
Добрый день. Все бы хорошо, но, как сделать не обработку а печатную форму?
Я сделал внешнюю печатную форму с шаблоном типа Active Document, добавил пока одну закладку на пробу, подключил, чтобы при нажатии кнопки «Печать» из справочника «договоры» выполнялось. Открывается Word, все работает, но, в базе возникает окно где написано : Печать. Печатная форма недоступна. Как сделать чтобы окно не вылезало? Обработка не подходит потому что она не падает в меню кнопки «Печать»
- Благин Константин Автор записи 08.09.2019 в 11:48
1. Конфигурация какая?
2. Нужен скриншот ошибки.
3. Нужен код модуля для анализа.
Скажите пожалуйста а можно шаблон word в обработку вставить, чтобы он в конфигурации был
- Благин Константин Автор записи 02.12.2019 в 20:54
Добрый день, подскажите, пожалуйста, как сделать так, чтобы подобный документ создавался при нажатии на кнопку на форме . Я создала команду «Документ», но не понимаю, что нужно вписать в ее обработчик. У меня имеется документ «ПриемНаРаботу» в виде списка, я заполняю форму (фио, паспорт, должность, оклад). А после могу нажать на кнопку «Документ», чтобы увидеть тот самый шаблон word.Как это можно сделать?
- Благин Константин Автор записи 15.12.2019 в 14:07
Ирина, вы можете воспользоватся примером из обработки, ссылку на которую находится внизу заметки.
1. Подготовить шаблон Word, расставив в нем закладки;
2. В код команды добавить заполнение файла и его вывод.
Добрый день, а как можно вставить в колонтитул на разных листах в ворде номера бланков взятых из 1С( 1 лист бланк — №0089 ,2 лист бланк — №0090 и …)
- Благин Константин Автор записи 02.02.2020 в 14:46
https://infostart.ru/public/488556/
Цитата:
Каждая страница Word разделена на несколько областей:
Верхний колонтитул
Основной текст
Нижний колонтитул
Нужно заметить, что в каждом разделе может быть уникальный колонтитул для первой страницы.
Использование 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.
Объект Word Application — методы
В этой статье мы рассмотрим методы объекта Word Application, методов довольно много. В большинстве случаев данные методы представляют только теоретический интерес, так как не дают возможности создавать сам документ Word.
В статье я не буду приводить примеров кода, так как по сути, нечего показывать, вы и сами с легкостью сможете написть небольшой скрипт на языке VBScript или JScript, или просто добавить макрос в редактор VBA, и просмотреть, как работают Word Application методы.
Объект Word Application — Методы
Activate () — Активизирует указанный объект.
BuildKeyCode (Arg1, Arg2, Arg3, Arg4) — Возвращает уникальный номер для указанной комбинации клавиш. Обязательнм является только первый параметр (Arg1). Все параметры содержат значение константы WdKey.
KeyString (KeyCode, KeyCode2) — Возвращает строку комбинаций клавиш для указанных ключей, которые содержат значения константы WdKey (например, Ctrl + Shift + A). Обязательным является только первый параметр.
ChangeFileOpenDirectory (Path) — Устанавливает каталог, к которому Word будет обращаться при работе с документами. По умолчанию таким каталогом является “Мои документы”.
CheckGrammar (Str) — Проверяет строку на предмет грамматических ошибок. Вернет True, если строка не содержит ошибок. Word Application методы.
CheckSpelling (Str) — Проверяет строку на предмет орфографических ошибок. Вернет True, если строка не содержит ошибок.
CleanString (Str) — Удаляет непечатаемые символы (коды символов 1 — 29) и специальные символы из заданной строки или заменяет их пробелами (символ кода 32). Возвращает результат в виде обработанной строки.
GoBack () — Перемещение курсора назад по последним трем позициям, в которых происходило редактирование (аналогично нажатию Shift + F5), Word Application методы
GoForward () — Перемещение курсора вперед по последним трем позициям, в которых происходило редактирование.
Help (HelpType) – Метод Word Application отображает установленную информацию справки.
HelpType – Определяет параметры показа, содержит значение константы WdHelpType:
- WdHelp — 0 — Отображает диалоговое окно справки.
- wdHelpAbout — 1 — Отображает диалоговое окно «О программе Microsoft Word».
- wdHelpActiveWindow — 2 — Отображение справку, описывающую команду, связанную с активным просмотром или панелью.
- wdHelpContents — 3 — Отображает диалоговое окно справки.
- wdHelpExamplesAndDemos — 4 — Отображает «Примеры и демонстрации».
- wdHelpIndex — 5 — Отображает диалоговое окно справки.
- wdHelpKeyboard — 6 — Отображает справку по сочитаниям клавиш.
- wdHelpPSSHelp — 7 — Отображает информацию о поддержке продукта.
- wdHelpQuickPreview — 8 — Отображает быстрый просмотр.
- wdHelpSearch — 9 — Отображает диалоговое окно справки.
- wdHelpUsingHelp — 10 — Отображение список разделов справки, которые описывают, как использовать Справку.
- wdHelpIchitaro — 11 — Открывает файл справки для пользователей Ichitaro.
- wdHelpPE2 — 12 — Показывает справку по IBM Personal Editor 2.
- wdHelpHWP — 13 — Открывает файл справки для пользователей AreA хангыль.
ListCommands (ListAllCommands) — Создает новый документ, а затем вставляет в него таблицу, содержащую сочетания клавиш и описания методов.
ListAllCommands – Параметр содержит логическое значение, true – все команды, false – только основные команды.
Move (Left, Top) – Позиция окна задач или активного документа. Параметры определяют горизонтальную и вертикальную позицию. Word Application методы
NewWindow () — Открывает новое окно для текущего документа. Возвращает объект Window.
ShowClipboard () — Отображает Буфер обмена.
SubstituteFont (UnavailableFont, SubstituteFont) — Устанавливает варианты отображения шрифта.
UnavailableFont — Название шрифта, недоступного на вашем компьютере, который вы хотите сопоставить с другим шрифтом для отображения и печати.
SubstituteFont — Название шрифта, доступного на вашем компьютере, который вы хотите заменить недоступным шрифтом.
Quit (SaveChanges, OriginalFormat, RouteDocument) — выход Microsoft Word и, возможно, сохраняет или маршруты открытые документы.
SaveChanges — Определяет, сохранять ли сделанные изменения в документе. Значение константы WdSaveOptions:
- wdDoNotSaveChanges — 0 — Не сохранять сделанные изменения.
- wdPromptToSaveChanges — 2 — Запросить у пользователя, чтобы сохранить внесенные изменения.
- wdSaveChanges — 1 — Сохранить сделанные изменения автоматически без запроса пользователя.
OriginalFormat – Определяет параметры сохранения. Значения константы WdOriginalFormat:
- wdOriginalDocumentFormat — 1 — Оригинальный формат документа.
- wdPromptUser — 2 – Пользователю будет предложено выбрать формат документа.
- wdWordDocument — 0 – Формат документа Microsoft Word.
RouteDocument — True, чтобы направить документ на следующего получателя. Если документ не имеет маршрутизации, то аргумент игнорируется, Word Application методы.
ResetIgnoreAll () – снимает метку со всех фрагментов текста, которые помечены как «без проверки» в процессе проверки орфографии.
Resize (Width, Height) — Размеры окна приложения Word или указанного окна задач. Параметры определяют ширину и высоту окна.
Run (MacroName, varg1, … , varg30) – запуск указанного макроса Visual Basic. Обязательный только первый параметр.
MacroName — Имя макроса.
varg1 . varg30 – До 30 параметров, передаваемых макросу.
ScreenRefresh () – Метод включает обновление экрана в течении одной команды
KeyBoard (code) – Переключение раскладки клавиатуры, в качестве параметра (code) передается целое значение (например, 1033 – для русского языка, 1049 – для английского языка). Если вызвать метод без параметров, то будет возвращено текущее значение раскладки клавиатуры. Word Application метод.
OnTime (When, Name, Tolerance) – Устанавливает таймер для запуска макроса в указанное время.
When — Время, в которое нужно запустить макрос. Можно прописать строкой (“15:30”) или использовать функции работы со временем.
Name — Имя макроса.
Tolerance – Дополнительный параметр. Задает максимальное время в секундах, которое может пройти, прежде чем мкрос, который не успел запуститься будет отменен.
Следующие Word Application методы отвечают за преобразование измерительных величин.
CentimetersToPoints (Centimeters) — Преобразует сантиметры в пункты (1 см = 28,35 пункта).
InchesToPoints (Inches) — Преобразует дюймы в пункты (1 дюйм = 72 пункта).
LinesToPoints (Lines) — Преобразует линии в пункты (1 линия = 12 пунктов).
MillimetersToPoints (Millimeters) — Преобразует миллиметры в пункты (1 мм = 2,85 пункта).
PicasToPoints (Picas) — Преобразует пики в пункты (1 пик = 12 пунктов).
PixelsToPoints (Pixels, fVertical) — Преобразует пиксели в пункты.
fVertical – Дополнительный параметр, True – по вертикали, False – по горизонтали.
PointsToCentimeters (Points) — Преобразует пункты в сантиметры.
PointsToInches (Points) — Преобразует пункты в дюймы.
PointsToLines (Points) — Преобразует пункты в линии.
PointsToMillimeters (Points) — Преобразует пункты в миллиметры.
PointsToPicas (Points) — Преобразует пункты в пики.
PointsToPixels (Points, fVertical) — Преобразует пункты в пиксели.
События для Word Application — VBA
Объект Word Application предоставляет в распоряжение довольно много событий, но… изначально к ним нет доступа в редакторе VBA. Второй проблемой является то, что события Word Application VBA нельзя использовать в сценариях Windows Script Host, ну я такой лазейки не нашел.
Что бы появилась возможность работать с событиями данного класса в редакторе VBA, надо выполнить следующие действия:
- Создаем новый модуль класса, для этого в меню Insert выберите пункт Class Module.
- В окне редактора для созданного модуля пишем код:
Все, теперь в редакторе кода в окне объектов появится объект App, который и предоставляет возможность работать с событиями Word Application в VBA.
Знаю, знаю, статья получилась довольно сухая – практически нет примеров Но ничего, в следующей статье мы быстренько пробежимся по некоторым свойствам, а потом еще попытаемся осилить коллекцию Documents и класс Document, без которых просто невозможно двигаться дальше.
Спасибо за внимание. Автор блога Владимир Баталий
Работа с Word — Создание, открытие, форматирование, закрытие и сохранение
Использование Word в приложениях на Visual Basic 6 открывает широчайшие возможности для создания профессионально оформленных документов (например отчетов). Это часто необходимо при работе в фирме или на предприятии для обеспечения документооборота. Основным преимуществом использования Wordа в этом случае является то, что практически на всех компьютерах, используемых в фирмах и на предприятиях установлены Windows и пакет Microsoft Office. Поэтому подготовленные документы Word не требуют каких-либо дополнительных усилий для их просмотра, печати и редактирования. Единственное что нужно помнить, это то что работа через автоматизацию OLE (связывание и внедрение объектов) на деле оказывается довольно медленной технологией, хотя и очень полезной.
Чтобы использовать объекты Word в Visual Basic , необходимо инсталлировать сам Word. После этого вы получаете в своё распоряжение библиотеку Microsoft Word Object Library, которую нужно подключить к текущему проекту через диалоговое окно «Разработать»>>»Ссылки» (References) и указать Microsoft Word 9.0 Object Library (для Word 2000).
Два самых важных объекта Word это Word.Application и Word.Document. Они обеспечивают доступ к экземпляру приложения и документам Word.
Поэтому в раздел Generals «Общее» формы введите следующий код для объявления объектных переменных приложения Word и документа Word.
Чтобы создать новый экземпляр Word, введите такой код кнопки;
Для форматирования печатной области документа используйте данный код:
(вообще-то Word использует для всех размеров своих элементов пункты, поэтому для использования других единиц измерения, необходимо использовать встроенные функции форматирования.)
- CentimetersToPoints(Х.ХХ) — переводит сантиметры в пункты.
- MillimetersToPoints(X.XX) — переводит миллиметры в пункты
Для того чтобы в своём приложении не писать постоянно одно и тоже имя объекта, можно использовать оператор With.
Например код находящейся выше можно переписать так:
Если вам необходимо создать документ Word с нестандартным размером листа, то используйте данный код:
Данный код меняет ориентацию страницы (практически меняет местами значения ширины и высоты листа):
- wdOrientLandscape — альбомная ориентация ( число 1)
- wdOrientPortrait — книжная ориентация ( число 0)
Для сохранения документа под новым именем и в определенное место используйте данный код код:
После такого сохранения вы можете про ходу работы с документом сохранять его.
Или проверить, были ли сохранены внесенные изменения свойством Saved и если изменения не были сохранены — сохранить их;
Завершив работу с документом, вы можете закрыть сам документ методом Close и сам Word методом Quit.
Если в методах Close и Quit не использовать необязательный параметр True то Word запросит согласие пользователя (если документ не был перед этим сохранён) на закрытие документа.
Если вам необходимо оставить Word открытым, просто не используйте методы Close и Quit.
Если вам необходимо поставить пароль на документ, то используйте код: