Semenalidery.com

IT Новости из мира ПК
5 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Word application documents

10.4 Коллекция Documents и объекты Document

Коллекция Documents, объект Word.Document, создание документов средства VBA из шаблонов, преобразование типов документов

На одну ступень ниже объекта Application в объектной модели Word (и по логике использования в приложениях) находятся коллекция Documents и объекты Document, из которых она состоит. При программировании в Word без коллекции Documents и объекта Document обычно не обойтись.

Чаще всего в программах нам нужно:

  • Запустить Word;
  • Создать или открыть документ;
  • Что-то с этим документом сделать (например, впечатать в нужные места этого документа значения, полученные из базы данных или от пользователя).

Запуск Word производится при помощи объекта Application, с которым мы уже знакомы. Для выполнения различных действий с документом используются объекты Selection, Range и Bookmark, которые будут рассмотрены ниже. А вот второй пункт — создание документа, открытие документа, проверка, открыт уже документ или нет, сохранение документа и т.п. реализуется при помощи коллекции Documents и объекта Document.

Самый простой вариант создания документа выглядит так:

Dim oDoc As Word.Document

Set oDoc = Application.Documents.Add()

При этом мы создали обычный пустой документ (на основе шаблона normal.dot) и получили на него ссылку в объектную переменную oDoc. Далее в документ можно программно вводить нужную нам информацию.

Однако создавать пустой документ и программно формировать все его содержимое удобно только тогда, когда документ очень простой. Попробуйте программно создать какой-нибудь документ посложнее, например, объявление на взнос наличными или большой договор. Возможно, у вас это получится, но работы потребуется очень много. Намного проще набрать и оформить сложные документы обычным способом — как простой документ Word и оставить в нем пустые места для заполнения из программы. Проще всего сделать это при помощи шаблона Word.

Например, в нашей ситуации нам вначале нужно набрать текст договора, оставив пустые места для изменяемых данных) и сохранить его с расширением .dot (предположим, что он сохранен на диске C: с именем dog_blank.dot). Тогда создать документ на основе этого шаблона можно так:

Dim oDoc As Word.Document

Set oDoc = Application.Documents.Add(«C:dog_blank.dot»)

А далее при помощи объектов Bookmark и Range (о них — в следующих разделах) вводим текст в оставленные пустые места.

Немного про то, где можно хранить шаблоны документов:

  • первый вариант — просто в файле на диске локального компьютера пользователя. Это — самый простой вариант, но у него есть недостатки: во-первых, пользователь может случайно его изменить, а во-вторых, удобнее использовать общий централизованный набор шаблонов для всех пользователей на предприятии, не копируя эти шаблоны на компьютеры каждого пользователя;
  • второй вариант — хранить шаблоны в скрытом сетевом каталоге на файл-сервере, доступном только на чтение. При этом нам не придется заботиться о наличие необходимого шаблона на компьютере пользователя. Однако и есть здесь проблемы: программа получается неавтономной, зависящей от внешних файлов на файл-сервере. Перенос ее, например, в филиалы будет сопряжен со сложностями;
  • третий вариант — поместить шаблон в базу данных. Удобнее всего поместить шаблон в виде объекта OLE в базу данных Access. В этой же базе данных Access удобно размещать код приложения, графические формы для пользователя и т.п. Запуск Word при этом будет производиться программно из Access. Конечно, такая программа сможет обращаться не только к данным в базе данных Access. но и к данным во внешних источниках — на SQL Server, Oracle и т.п.

Третий вариант наиболее удобен, поскольку ваше приложение со всеми шаблонами, программным кодом и т.п. будет состоять из единственного файла MDB (а документы будут создаваться как обычные файлы Word). Кроме того, Access сам по себе — очень мощное приложение, в нем есть множество удобных возможностей. Единственная проблема в этом случае — то, что метод Documents.Add() согласен принимать шаблон только в виде файла на диске, а про базы данных он ничего не знает. Можно предварительно извлекать шаблон документа из базы данных и сохранять его в файле во временном каталоге, но лучше идти другим путем и активизировать объект шаблона в базе данных методом OLEActivate(). При этом у нас автоматически будет запущен Word и в нем будет создан новый документ на основе шаблона из базы данных. Подробнее о том, как это делается — в главе про Access.

Часто возникает потребность программным способом не создавать новый документ, а открыть уже имеющийся и с ним что-то сделать. Открыть документ проще всего при помощи метода Open() коллекции Documents. Самый простой вариант применения этого метода выглядит так:

Dim oDoc 1 As Document

Set oDoc1 = Documents.Open(«c:doc1.doc»)

Если этот документ уже открыт, то умолчанию просто создается ссылка на уже открытый документ, вместо открытия документа заново.

Важная (и неочевидная) особенность метода Open() заключается в том, что при его использовании во время открытия файла не открывается диалоговое окно «Предупреждение системы безопасности», в котором пользователь может отключить макросы. За счет этого разработчик может гарантировать работоспособность своего приложения или реализовать систему защиты — от печати, доступа к разным функциям и т.п.

Сохранять документы лучше при помощи методов Save() и SaveAs() объекта Document. В коллекции Documents есть также свой метод Save(), который позволяет сохранять все открытые документы Word сразу, но обычно это менее удобно.

Коллекция Word Documents

Наконец то я смогу написать статью с примерами. Дело в том, что ключевым компонентом объектной модели Word является не сам объект Word.Application, а коллекция Documents, так как именно она предоставляет два ключевых метода – для создания и открытия документа Word. Конечно, у коллекции Word Documents есть и другие методы и свойства, но они не столь важны. И поэтому, мы рассмотрим только самые основные.

Сама по себе коллекция Documents хранит в себе набор всех объектов Document, которые в свою очередь позволяют работать с каждым экземпляром документа в отдельности. Я буду приводить примеры как в самом редакторе VBA, как и с помощью сценариев Windows Scrip Host.

Читать еще:  Преобразование текста в таблицу word

Единственно свойство, которое позволяет узнать общее количество элементов коллекции является Count:

Count – содержит количество открытых в данный момент документов.

Для примера, откройте несколько word документов и в редакторе VBA пропишите следующий код (просто создайте новый модуль):

В данном случае мы использовали два способа бля работы с коллекцией:

  • Использовали цикл for each для обработки коллекции
  • Использовали свойство count для определения количества элементов в коллекции Documents.

Оба способа позволяют получить имена всех документов открытых в данный момент.

Однако, если мы попробуем проделать аналогичный фокус в сценарии Windows script Host, то никакого результата не получим:

Видимо из внешнего сценария мы можем обработать только ту коллекцию, которую создали тут же.

Методы коллекции Word Documents

Хорошо, теперь давайте рассмотрим некоторые методы коллекции Word Documents, один из методов мы уже использовали выше (Item).

Add (Template, NewTemplate, DocumentType, Visible) – отвечает за создание нового документа, который сразу же открывается, можно выполнить метод без параметров. Параметры:

    Template – задает шаблон для нового документа

При отсутствии параметров, будет создан чистый документ на основе шаблона Normal.dot.

Обратите внимание, что свойство Visible есть и у объекта Word Application, там оно позволяет показать или скрыть все экземпляры объекта Application.

Ниже привожу пример, сценария, в котором создается пять документов, выводится их количество и далее они закрываются:

Item (index) переход к заданному элементу коллекции по его индексу. Значение индекса можно задавать как через метод, так и через коллекцию, так как метод Item используется по умолчанию. Следующие две строки кода являются эквивалентными:

Open (FileName, ConfirmConversions, ReadOnly, AddToRecentFiles, PasswordDocument, PasswordTemplate, Revert, WritePasswordDocument, WritePasswordTemplate, Format) – открыть заданный документ

  • FileName – только этот параметр является обязательным, содержит путь к файлу, если надо открыть несколько документов, то имена разделяются пробелами.
  • ConfirmConversions – содержит логическое значение, определяющее, надо ли отображать (TRUE) или нет (FALSE) отображать диалоговое окно Convert File, если документ записан не в формате Word.
  • ReadOnly – определяет, открывать ли документ только для чтения (значение TRUE).
  • AddToRecentFiles – если значение TRUE, то документ добавляется к списку файлов внизу меню Файл.
  • PasswordDocument, PasswordTemplate – пароль к документу или пароль к шаблону, соответственно. Application Documents Word.
  • Revert – если данный параметр содержит значение TRUE, то при попытке открыть уже открытый документ, сделанные в нем изменения не будут сохраняться. Если значение FALSE – произойдет простая активизация документа.
  • WritePasswordDocument – пароль, который запрашивается при сохранении документа.
  • WritePasswordTemplate — пароль, который запрашивается при сохранении шаблона.
  • Format – параметр содержит параметр для преобразования файла. Значения: wdOpenFormatAuto (по умолчанию), wdOpenFormatDocument, wdOpenFormatRTF, wdOpenFormatTemplate, wdOpenFormatText, wdOpenFormatUnicodeText.

Save () и Close () – сохранение и закрытие (соответственно) всех документов в заданной коллекции.

Спасибо за внимание. Автор блога Владимир Баталий

Объектная модель 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 .

Читать еще:  Многоуровневый список в word 2020

Для того чтобы справка по свойствам и методам работала, объектную переменную надо сначала объявить, а потом присвоить ей ссылку на объект . Например, так (листинг 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 и excel

Если вы хотите, чтобы какой-то макрос запускался с некоторой периодичностью — установку таймера на запуск этого макроса можно установить в нем. Первый запуск макроса можно произвести вручную или каким-то другим способом (например — по событию приложения, с помощью автоматически выполняемого макроса), а последующие запуски этот макрос будет инициировать самостоятельно.

Работа с 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.

Если вам необходимо поставить пароль на документ, то используйте код:

Создание документа Word из Excel

при этом создаёт таблицу

если создаю документ при помощи

Создание документа Word по шаблону из Excel
Пытаюсь создать документ Word из шаблона. Необходимо в шаблон добавить текст. Добавляю но шаблон.

Создание документа Word из таблицы Excel
Доброе время суток! Не отправляйте, пожалуйста, в поиск, прочитав название темы. В тексте я.

Добавление срок в таблицу Word при заполнении документа Word из данных Excel
Всем привет! Я новичок в этом деле и нужна помощь. Есть таблица Excel с данными на основании.

Сохранение документа Word из макроса Excel
Макросом Excel формирую в рабочей книге в ячейке B3 имя для документа Word (типа itogi_050914.doc).

bizard, в программе Word свойство Selection относится к объекту Window. У объекта Document нет свойства Selection.

Чтобы проще было писать код, в программе Excel в VBA нужно подлючить библиотеку:
ToolsReferences..Microsoft Word Object Library.

В этом случае, когда ставите точку, то будут всплывающие подсказки.

Переменные в этом случае можно так создавать:

сделал как вы сказали
это он проглотил
застопорился на .Font.Size = 11
убрал пока эту строчку
пошёл выполнять Call ШАПКА

и тут затык на .TypeText Text:= _


что ему ещё надо ведь со строчкой .Documents.Add DocumentType:=wdNewBlankDocument
всё работало и создавало кроме таблицы

Большое спасибо, вроде дошло на ночь глядя.
С наступающим Новым годом! Всего самого наилучшего вам в новом году.

Добавлено через 10 часов 59 минут
ещё пару вопросов
ActiveDocument.Content.Font.Size = 11 не хотит работать
.Content.Font.Size = 11 так работает

Теперь ругается на .TypeParagraph
как правильно написать
.Content.TypeParagraph не подходит
ActiveDocument.TypeParagraph тоже

bizard, сначала делайте код в программе Word.
Когда ставите точку, то появляются члены, которые есть у объекта. Если среди членов нет нужного, значит у объекта нет этого члена. Есть случаи, что не все члены появляются после того, как поставишь точку, но такое редко бывает.

TypeParagraph — является членом объекта Selection. Если вы перейдёте в программу Word, октроете программу VBA, введёте ActiveDocument и поставите точку, то во всплывающей подсказке не будет TypeParagraph. Это означает, что у объекта ActiveDocument нет члена TypeParagraph (могут быть исключения — член не появляется, но есть, но это бывает редко).

bizard, чтобы в документ Word занести данные, нужно указать место, куда эти данные занести.

Для указания места используются следующие объекты:

  1. Selection;
  2. Range. В некоторых случаях, для удобства чтения кода, вместо слова Range используется слово Content.

При использовании макрорекордера, вы получает код с объектом Selection.
Соответственно для объекта Range нельзя получить код с помощью макрорекордера и нужно обратиться к встроенной справке VBA или же искать ответы на свои вопросы, делая запросы в Гугл или Яндекс.

Ссылка на основную публикацию
Adblock
detector