Semenalidery.com

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

Объекты word vba

Объекты word vba

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

Каркас документа Word

Каркас документа строится автоматически в момент его создания. Из общей совокупности библиотек объектов, составляющих Office 2000, в каркас документа входят те библиотеки, чьи объекты необходимы для построения документа данного типа. Часть из библиотек содержат общие объекты и входят в каркасы документов всех типов, создаваемых в Office 2000. Часть библиотек каркаса определяют специфику документа. Взгляните на каркас по умолчанию документа Word:

увеличить изображение: увеличить изображение,
Рис. 1.1. Каркас по умолчанию документа Word

Как можно видеть, в каркас входят кроме библиотеки Word еще три библиотеки и два проекта:

  • Word — библиотека, задающая основу документов Word. Здесь хранится класс, задающий корневой объект Word.Application , и все классы объектов, вложенных в корневой объект.
  • Office — библиотека объектов, общих для всех приложений Office 2000. Здесь находятся классы, определяющие инструментальные панели — CommandBar и классы других общих объектов. Здесь же находятся классы, задающие Помощника (объект Assistant и все классы, связанные с ним). В частности, появился новый объект, которого не было в предыдущей версии — Мастер Ответов (Answer Wizard).
  • Stdole — библиотека классов, позволяющая работать с OLE — объектами и реализовать Автоматизацию.
  • VBA — библиотека классов, связанных с языком VBA. Здесь хранятся все стандартные функции и константы, встроенные в язык, классы Collection и ErrObject .
  • Project — проект по умолчанию, связанный с документом. Классы, которые могут программистом создаваться в этом проекте, методы, свойства, — все это доступно для просмотра, так же, как и объекты классов, встроенных в стандартные библиотеки.
  • Normal — проект, доступный для всех документов Word. Здесь могут храниться функции и классы, используемые всеми документами.

До сих пор речь шла о каркасе, создаваемом по умолчанию. Но при работе с документом этот каркас можно существенно изменить, добавив в документ новые классы, а значит и новые свойства. Для этого достаточно включить в состав каркаса другие библиотеки классов из той совокупности, что входит в Office 2000. Заметим, набор дополнительно поставляемых библиотек в Office 2000 существенно вырос по сравнению с предыдущей версией.

А теперь о том, как это делается. Прежде всего, заметим, что расширение каркаса делается обычно руками, но можно делать это и программно. Для того чтобы вручную добавить в документ новые возможности, необходимо вначале войти в режим редактора программного проекта, для чего достаточно в меню Tools | Macro выбрать пункт Visual Basic Editor или нажать комбинацию клавиш Alt + F11. Затем уже в Редакторе из меню Tools следует выбрать пункт References и в появившемся списке возможных библиотек включить те, которые отвечают Вашим потребностям. На рис. 1.2 показан процесс подключения к документу Word новых библиотек.


Рис. 1.2. Расширение возможностей каркаса документа

В данном примере я подключил библиотеки объектов трех приложений — Outlook, Access и Excel, библиотеку с WEB — классами и загрузчик объявлений, необходимых для вызова API — функций. В результате каркас документа существенно обновился, и документ теперь обладает потенциально большими возможностями, чем документ, создаваемый по умолчанию. В этом документе можно организовать совместную работу четырех приложений Office 2000, работать с WEB — компонентами. Конечно, каркас обеспечивает только потенциальную возможность, чтобы все заработало, нужно многое сделать, наполняя каркас плотью. Например, необходимо описать и создать соответствующие объекты Application для каждого из совместно работающих приложений, прежде чем начать с ними работать.

На рис. 1.2 можно увидеть лишь небольшую часть всей совокупности библиотек (их несколько десятков), доступных в Office 2000. Завершая разговор о каркасе документа, нам остается сделать два важных замечания. Во-первых, заметим, что включение ссылок на новые библиотеки и соответствующее расширение каркаса документа немедленно отражается при просмотре объектов документа. Взгляните на рис. 1.3, где показано, что теперь все объекты, потенциально включенные в состав документа, стали доступными для просмотра и получения справки:


Рис. 1.3. Окно просмотра объектов каркаса документа

Во-вторых, обратим Ваше внимание на то, что технология работы в Office 2000 рекомендует создавать документы на основе некоторого шаблона. Поэтому, однажды создав документ с требуемым набором возможностей и сохранив его в качестве шаблона, в последующем можно открывать новые документы на основе этого шаблона, не задумываясь уже о том, как и какие библиотеки следует подключать.

10.4.3 Работа с объектом Document , его свойства и методы

Объект Word.Document, программная работа со свойствами и методами документа в VBA

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

Обратите внимание, что к объекту Document можно обращаться и не создавая специальную объектную переменную. Существует еще по крайней мере три способа получения доступа к объекту Document:

  • работать с документом как с элементов коллекции Documents. Формате обращения может выглядеть, например, так: Documents.Item(1);
  • использовать специальное ключевое слово ThisDocument. При помощи него можно получить ссылку на объект документа, которому принадлежит исполняемый программный модуль, например:
  • использовать свойство объекта Application ActiveDocument. Это свойство возвращает нам объект активного документа:

Самые важные свойства объекта Document представлены ниже:

  • ActiveWritingStyle — текущий активный стиль (заголовок определенного уровня, обычный текст, гиперссылка и т.п.). Рекомендуется проверить перед вводом текста.
  • AttachedTemplate — возможность подключить шаблон (со всеми макросами, стилями, записями автотекста и т.п.) или проверить, какой шаблон подключен (вручную это можно сделать через меню Сервис ->Шаблоны и надстройки).
  • Background — возвращает объект Shape, представляющий фоновый рисунок (фоновые рисунки видны только в режиме Web-документ);
  • BuiltInDocumentProperties — возможность получить ссылку на коллекцию DocumentProperties с одноименными объектами, представляющими встроенные свойства документа (название, автор, категория, комментарии и т.п.);
  • Characters — возвращает коллекцию объектов Range, каждый из которых представляет один символ. Это свойство есть не только у объектов Document, но и у объектов Selection и Range. Может использоваться, например, для выполнения операция поиска и замены или статистических подсчетов (например, для если переводчику платят за количество символов);
  • Content — свойство, возвращающее объект Range, представляющий главную цепочку документа (main document story). Если говорить проще — просто текст документа, без колонтитулов, сносок, комментариев и т.п.
  • CustomDocumentsProperty — свойство, возвращающее коллекцию объектов DocumentProperties, представляющих пользовательские свойства документа. Можно использовать для сохранения вместе с документом любых значений переменных. Очень удобно, например, для подсчета количества открытий документов, флажков печатался/не печатался, сколько раз вызывалась та или иная функция, на каких компьютерах и каким пользователем открывался и т.п.
  • DefaultTabStop — определить отступ по умолчанию при использовании символа табуляции. По умолчанию — 35 пунктов, что примерно равно 1,25 см;
  • DisableFeatures — отключить возможности, которые понимают только последние версии Word (для совместимости с пользователями, у которых на компьютерах стоят старые версии). Обычно само свойство DisableFeatures просто включает этот режим, а конкретный уровень совместимости задается при помощи свойства DisableFeaturesIntroducedAfter.
  • DoNotEmbedSystemFonts — не вставлять в документ системные шрифты (по умолчанию для русского, японского и т.п. вставляются). Позволяет сократить размер документа — но тогда пользователи в системе, где не стоит русский язык, не смогут прочесть этот документ.
  • EmbedTrueTypeFonts — очень полезное свойство, если вы работаете с документом в месте, где используются экзотические шрифты (например, в издательстве). Вставка true-type шрифтов гарантирует, что получатели документа будут видеть его точно таким же, как и создатель.
  • Envelope — позволяет получить ссылку на специальный объект Envelope, который используется для создания почтовых конвертов.
  • Fields — возможность получить ссылку на коллекцию Fields одноименных объектов. Очень полезна при работе с полями.
  • Footnotes — возможность получить коллекцию сносок.
  • свойства Formatting… — что показывать в списке стилей в панели инструментов Форматирование.
  • FormFields — аналогично Fields, но в этом случае мы получаем ссылку на поля в формах.
  • FulName — полное имя объекта (вместе с путем к нему в файловой системе или Web). Доступно, конечно, только для чтения.
  • GrammarChecked — пометить весь документ, как проверенный с точки зрения грамматики (фактически отключить проверку грамматики для данного документа). Такое же свойство существует и у объекта Range. Коллекцию ошибок, выловленных при проверке грамматики, можно получить при помощи свойства GrammaticalErrors, а выделить ошибки зеленым волнистым подчеркиванием (если они еще не выделены) — при помощи свойства ShowGrammaticalErrors. Для орфографических ошибок существует аналогичные свойства SpellingChecked, SpellingErrors и ShowSpellingErrors.
  • HasPassword — проверить, назначен ли пароль для указанного документа. Password — назначить пароль. По причине крайней слабости парольной защиты пароли в Word, Excel и Access использовать не рекомендуется.
  • Indexes — возвращает коллекцию индексов (то есть предметных указателей) для документа.
  • Name — возвращает имя документа (без пути к нему).
  • OpenEncoding — возвращает кодовую страницу, которая использовалась для открытия документа. Для русского языка по умолчанию, конечно, 1251.
  • PageSetup — позволяет получить ссылку на одноименный объект. Используется, конечно, в основном при реализации печати.
  • Paragraphs — возвращает ссылку на коллекцию абзацев в данном документе.
  • Path — возвращает путь к документу в файловой системе (без имени). Может пригодиться, чтобы создать еще один файл по тому же пути.
  • Permission — возможность получить доступ к объекту Permission, который позволяет управлять системой внутренних разрешений документа Word (не разрешений файловой системы).
  • PrintRevisions — печатать или нет пометки редактора (исправления) вместе с документом. По умолчанию — печатать.
  • ProtectionType — проверить защиту данного документа (разрешено все, или только комментарии, чтение, изменения в полях форм и т.п.). Сама защита устанавливается при помощи метода Protec()t.
  • ReadOnly — здесь объяснений не требуется. Это свойство доступно только на чтение (поскольку соответствующий атрибут устанавливается в файловой системе).
  • RemoveDateAndTime и RemovePersonalInformation — удалить информацию о дате и времени произведенных изменений и всю информацию о пользователе из документа (включая свойства документа). Может быть полезным при создании файла-образца.
  • Saved — очень важное свойство. Позволяет определить, изменялся ли документ со времени последнего изменения.
  • SaveEncoding — позволяет явно указать (или получить) кодировку, которая будет использоваться при сохранении документа.
  • SaveFormat — позволяет получить информацию о формате документа (DOC, RTF, TXT, HTML и т.п.). Доступно только для чтения.
  • Sections — возвращает коллекцию разделов документа. Sentences — то же самое для предложений. Аналогично работают свойства Shapes , Styles, Subdocuments, Tables, Windowsи Words .
  • Type — возвращает тип документа (обычный, шаблон или Web-страница с фреймами).
  • Variables — еще одно очень удобное свойство. Можно использовать для сохранения своих служебных данных вместе с документом, как и пользовательские атрибуты ( custom attributes), но в отличие от пользовательских атрибутов документа, пользователям эти свойства не видны.
Читать еще:  Как объединить документы word в один

Теперь — о самых важных методах объекта Document:

  • Activate() — этот метод позволяет сделать указанный вами документ активным (например, для ввода текста).
  • AddToFavorities() — добавить ссылку на документ в каталог «Избранное». Может быть полезным, если пользователь будет работать с ним постоянно.
  • CheckSpelling() и CheckGrammar() — запустить проверку орфографии и грамматики соответственно.
  • Close() — закрыть документ. Можно закрыть с сохранением (по умолчанию), а можно — без (если указать соответствующий параметр).
  • Compare() — сравнить документ с другим и сгенерировать редакторские пометки в местах, где обнаружены различия.
  • DataForm() — возможность редактирования форм данных — то есть данных, которые в документе разделены разделителями полей и строк. Вообще говоря, формы данных в Word рекомендуется использовать только в случае крайней необходимости — гораздо больше дл работы с упорядоченными данными приспособлены Excel и Access.
  • DetectLanguage() — определить язык текста. Проверка производится по предложениям, на основе сверки слов в них со встроенными словарями. Такая проверка производится автоматически во время ввода текста или открытия нового документа. Чтобы заново провести проверку языков, свойство LanguageDetected нужно перевести в False.
  • FitToPages() — очень интересный метод. Размер шрифта автоматически меняется таким образом, чтобы текст стал занимать на одну страницу меньше. Можно использовать для устранения «висячих страниц» и других проблем верстки.
  • FollowHyperlink() — открыть указанный вами документ в соответствующем приложений (если HTML, то в Internet Explorer).
  • GoTo() — очень мощный метод, существует для объектов Document, Range и Selection. В первых двух случаях он возвращает объект Range, в третьем — просто перемещает указатель ввода текста на нужное место. Умеет переходить на начало страницы, строки, закладки, комментария, таблицы, секции, поля, ссылки, формулы и т.п. Может на определенный номер этого объекта, первый, последний, следующий и т.п. Очень удобно использовать для установки указателя в нужное место для автоматического ввода текста.
  • Merge() — возможность произвести слияние двух документов. Метод очень сложный и мощный, основывается на применении редакторских пометок.
  • PresentIt() — открывает данный документ Word в PowerPoint.
  • PrintOut() — очень сложный метод, который позволяет вывести на печать весь документ или его часть. Принимает два десятка параметров (все — необязательные). Может использоваться для объектов Application, Document и Window.
  • PrintPreview() — перевести документ в режим предпросмотра.
  • Protect() — возможность ограничить внесения изменений в документ при помощи пароля или IRM.
  • Range() — очень важный метод. Возвращает объект Range (он будет рассмотрен ниже), принимает в качестве параметров номер начального символа диапазона и номер конечного символа.
  • Redo() — повторить последнее действие. В качестве параметра принимает количество последних действий, возвращает True, если повтор был произведен успешно.
  • Repaginate() — переразбить документ на страницы. Обычно используется, если автоматическая разбивка была ранее отключена.
  • Save() — смысл этого метода очевиден. Если документ еще не сохранялся, открывается диалоговое окно Save As.
  • SaveAs() — очень мощный и сложный метод. Можно определить путь для сохраняемого документа, его формат, кодировку, пароли на открытие и изменение документа, вставку шрифтов и многое другое. Очень полезный метод, например, для автоматической конвертации документов.
  • Select() — позволяет просто выделить весь документ. Этот метод существует для очень большого количества объектов, в том числе Selection и Range.
  • TransformDocument() — исключительно мощный метод, но только для программистов, которые хорошо разбираются в XML и XSLT. Позволяет применить к документу таблицу преобразований стилей (Extensible Stylesheet Language Transformation, XSLT), при помощи которой можно поменять все, что угодно.
  • Undo() — отменить определенное количество последних действий. По синтаксису и принципам работы — полный аналог Redo().
  • UndoClear() — очистить буфер отмены изменений, чтобы пользователь не смог откатить произведенные действия.
  • UnProtect() — снять защиту с документа (определенную методом Protect() или на графическом интерфейсе). Может быть очень полезным перед программным внесением изменений в защищенный документ.

Часто используемых событий у объекта Document всего три — New() (можно определить только для шаблона, срабатывает, когда на основе этого шаблона создается новый документ), Open() и Close(). Все эти свойства очевидны и изначально доступны в окне редактора кода Visual Basic.

Объекты word vba

В этой табличке были выделены те элементы объекта document, что принадлежат семейству range (диапазон).
Именно через этот элемент происходит доступ к любому месту/символу/вставке/и т.д. Как вы успели, наверное, заметить, любой символ документа принадлежит к семейству range. Причем один символ еще принадлежит к подразделу characters, группа символов ограниченных пробелами (точнее заканчивающиеся пробелами или знаками препинания) — к подразделу words, набор символов ограниченных точками с пробелом (переводами каретки, и т.п.) — к Sentences. На мой взгляд — замечательная задумка. Само собой, что там, где есть что-то хорошее — там есть и плохое.
Плюсы, наверное, очевидны:

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

Эти огромные преимущества над многими иными способами отметки элементов текста, к сожалению, немного смазываются некоторыми неприятностями.

* Большой текст — много элементов семейства — документ сильнее загружает машину при работе с ним.
* Известно, что, например, работа с массивом происходит быстрее.
* Ввиду заложенных особенностей каждого элемента семейства range не всегда корректно работает поэлементная статистика, для предотвращения чего навешивается проверка ошибок статистики и проч.

Нет, конечно же, Range работает правильно. Именно так, как и должно быть по правилам элементов семейств. Но не всегда так, как хочется. Например: Данилов М.Е. — Это 6 слов (точка — самостоятельное слово, пробел к словам не относится, далее следует место вставки т.е. курсор — это тоже слово), и одно предложение. Но проверка насильно мне указывает, что я забыл пробел после первой точки. Ставим пробел — получили 6 слов, и 2 предложения. Именно этот момент чаще всего вынуждает при авто переносе текста из какого-нибудь другого приложения office использовать другие механизмы передачи данных (поля, закладки, переменные). Но если вы точно знаете, сколько слов и предложений будет (было), то раскидать по местам нужные нам данные не составит очень уж большого труда.

Принципы использования основных методов и свойств того или иного семейства Word не имеют особых различий с принципами общей работы с семействами в VBA. Поэтому обращать внимание на них нет необходимости, а при наличии таковой обращайтесь к встроенной помощи Word, там все понятно написано. А пока пример, на использование основных, отмеченных элементов.

Задача.
* Открываем новый документ на основе шаблона normal.
* Проверим, нет ли там чего ненужного (слов, и т.п.).
* Создаем и вставляем текст.
* Находим 10 Слово.
* Меняем его на него же, но с заглавной буквы.
* Находим слово аксессс и меняем его на Access
* Находим символ [@], причем не позднее 3-го предложения, меняем его на [№].
* Ищем «господа» и добавляем «, а также дяденьки и тетеньки».
Все действия производим, используя механизмы Word.

Public Sub text_in_word()

Dim word_obj As Object ‘ не стоит забывать что так тоже можно обьявлять переменную.

Dim const_input_txt As String ‘ Это тот кусок текста, что нам надо перенести в ворд

Dim Full_name_new_doc As String ‘ПОЛНОЕ имя нашего документа будет лежать здесь

Dim Name_new_doc As String ‘имя нашего документа будет лежать здесь

Dim i As Integer ‘пригодится, мало ли чего. 🙂

Dim range_word As Word.Range ‘а вот это стадия раннего связывания. <О раннем и позднем связывании можно прочитать здесь>.
‘ Ниже будет понятно зачем оно нам надо (не связывание а переменная)
Dim range_character As Word.Range ‘Ниже будет понятно зачем оно нам надо

Dim range_sentences As Word.Range ‘Ниже будет понятно зачем оно нам надо

» ———-стандартный модуль открытия объекта ———

Err.Clear ‘очистка ошибок

On Error Resume Next

Set word_obj = GetObject(, «word.Application») ‘Проверили, вдруг ворд уже открыт

If Err = 429 Then ‘ ну коли закрыт — откроем

Set word_obj = CreateObject(«word.Application») ‘так или иначе, объект мы получили

ElseIf Err <> 0 Then

MsgBox «error» & Err ‘ если какая то еще ошибка — например пользователь не имеет доступа

End If ‘ к ворд — пишем какая ошибка

If Err <> 429 And Err <> 0 Then Exit Sub Else Err.Clear ‘ и выйдем, если ошиблись

On Error GoTo 0 ‘ при этом еще происходит очистка ошибки аналогично Err.Clear

On Error Resume Next

If Dir(«c:text_in.doc», vbNormal) <> «» Then Kill «c:text_in.doc» ‘Этот файл будет шаблоном

‘для последующего переноса данных. Если он уже есть тогда его удалим.

If Err = 75 Then

MsgBox «А кто то с этим файлом работает. » ‘если файл занят другими пользователями

Читать еще:  Как убрать разрешить редактирование в word

Exit Sub ‘ остановим процедуру

ElseIf Err <> 0 Then

MsgBox Err ‘ при условии что призошла ошибка файловой системы

Exit Sub ‘ тоже остановим процедуру

On Error GoTo 0

»——————- место для файла есть, объект создали ———

»—— Откроем новый файл, с шаблоном Normal ———

With word_obj ‘Что бы не писать далее много раз имя переменной.

‘И работать будет немного быстрее

.Visible = True ‘а то не видно, чего там происходит 🙂

.Documents.Add Template:=»normal.dot», NewTemplate:=False, _

‘ добавили ЧИСТЫЙ НОВЫЙ документ, шаблон у него будет normal, он станет активным при открытии

‘ и будет именно документом, а не шаблоном

Full_name_new_doc = .ActiveDocument.FullName ‘ получили ПОЛНОЕ имя нашего нового документа

Name_new_doc = .ActiveDocument.Name ‘ получили имя нашего нового документа

const_input_txt = «Уважаемые дамы и господа! Оповещаем Вас, что надо обработать » & _

«все нижеперечисленные заказы и развезти их по адресам:» & vbCrLf & » Заказ#234/исп » & _

vbCrLf & «тот кто не имеет аксесс к необходимым документам, тот будет отстранен до выяснения » & _

«причин присутствия наличия отсутствия!»
‘Тут я использовал vbcrlf,как перенос строки, для получения

‘более структурно различимого текста в документе. Но даже перенос можно было обработать програмно

‘ добавлением в слова перенос строки.

If .ActiveDocument.FullName <> Full_name_new_doc Then .Documents(Name_new_doc).Activate

If .ActiveDocument.Words.Count > 1 Then ‘ дело в том что в чистом документе есть 1 «слово»

‘Это место вставки.

For i = .ActiveDocument.Words.Count To 2 Step -1 ‘Задом наперед для того что бы не возиться с

.ActiveDocument.Words(i).Delete ‘убираем все слова поочередно, начиная с последнего

‘я, конечно же, понимаю, что в НОВОМ документе нет ничего. Этот кусок нужен тем, кто работает

‘ с существующими документами.

.Selection.Text = const_input_txt ‘ Использовали объект selection для вставки текста.

‘т.к. именно наш документ сейчас активен — то все нормально.Но все же я проверил какой документ активен.

‘ввиду того, что никаких выделеных областей в новом документе нет, а есть только область вставки

‘(палочка-курсор), то вставится именно в это место.

If .ActiveDocument.Words.Count > 10 Then
‘Мы то знаем что слов вставили более 10 шт. Но мало ли чего.

.ActiveDocument.Words(10). Case = wdTitleWord ‘Удобный метод range, по смене регистра

For Each range_word In .ActiveDocument.Words ‘Поиск во всем диапазоне слов

If range_word.Text = «аксессc » Then range_word.Text = «Access »
‘ слово должно оканчиваться пробелом
‘ или знаком препинания или спец сиволом

Set range_sentences = .ActiveDocument.Range(Start:=.ActiveDocument.Sentences(1).Start, End :=.ActiveDocument.Sentences(3). End )
‘ сделали конецом диапазона третье предложение ‘ сделали началом диапазона первое предложение

For Each range_character In range_sentences.Characters
‘ только для 3х предложений

If range_character.Text Like «@» Then range_character.Text = «№»
‘ like тоже можно использовать

Next
‘ последнее, это добавление новых элементов в коллекцию.
‘ много вариантов. Например использовать метод replace
‘ можно использовать метод find, а потом selection и вставить текст
‘ ну раз уж мы используем коллекции. У words нет явного метода add. Думаю это сделано для
‘ избежания неразберихи, при введении этого метода явно.
‘ а вот метод insertafter (before) как пить дать то что надо!

For Each range_word In .ActiveDocument.Words

If range_word.Text = «господа» Then range_word.InsertAfter «, а также дяденьки и тетеньки»

Next
‘ ну вроде все что обещался — сделал. Причем только методы ворд использовал.

Full_name_new_doc = «c:text_in.doc»
‘Задали имя для записи документа

.ActiveDocument.saveas filename:=Full_name_new_doc, fileformat:=wdFormatDocument
‘вообще
‘SaveAs имеет много параметров, так что я часть их просто не использовал

.ActiveDocument. Close
‘Закрыл именно этот документ

If .Documents.Count = 0 Then .Application.Quit SaveChanges:=wdDoNotSaveChanges
‘А вот тут как раз проверили, если нет более документов — можем вообще закрыть приложение.

Set word_obj = Nothing
‘очистили память

Модуль запускается из Access и создает документ на диске С в корневом каталоге. Этот пример при пристальном осмотре должен научить использовать основные элементы семейства range объекта document приложения Word. В принципе, все вышеперечисленные механизмы позволят быстро ориентироваться в теле любого документа. Одно большое НО. Для передачи данных из другого приложения и создания шаблона надо выстроить четкий алгоритм расстановки данных.

Самое неприятное, что из-за 1 неправильного символа все может «поплыть». Тогда полученный документ нельзя будет назвать созданным автоматически — его же придется потом подправлять руками. Те механизмы, что я привел, легко позволят забрасывать в чистый новосозданный файл какие-то данные без каких-либо затруднений. Указывая разные диапазоны вставки, можно заполнять и уже существующие документы, хотя, что бы не испортить уже существующие данные надо четко представлять себе процесс работы. Самым важным фактором этого метода является «наличие отсутствия» как такового файла шаблона создаваемого документа, т.е. посредством него можно сделать т.н. «Защиту от Дурака» — любителя стирать непонятно зачем файлы типа «Шаблон_моей_программы.dot»

Что касается остальных, не менее важных элементов Document, то оставим их на следующий раз.

Напоследок маленький, но забавный и не особо нужный в работе пример. Кувыркатель индикатора клавиатуры (язык при этом меняется только в Word) при запуске модуля из Access. Не знаю, то, что в других приложениях office язык остается тем же, хотя индикатор сменился, правильно это или нет. Вам судить. Но, как факт, такое возможно:

Public Sub shifted_lang()

Dim word_obj As Word.Application
‘Требует раннего связывания

Err.Clear ‘очистка ошибок

On Error Resume Next

Set word_obj = GetObject(, «word.Application»)
‘Проверили, вдруг ворд уже открыт

If Err = 429 Then ‘ ну коли закрыт — откроем

Set word_obj = CreateObject(«word.Application»)
‘так или иначе, объект мы получили

ElseIf Err <> 0 Then

MsgBox «error» & Err
‘ если какая то еще ошибка — например пользователь не имеет доступа

End If ‘ к ворд — пишем какая ошибка

If Err <> 429 And Err <> 0 Then Exit Sub Else Err.Clear
‘ и выйдем, если ошиблись

On Error GoTo 0 ‘ при этом еще происходит очистка ошибки аналогично Err.Clear

If word_obj.Keyboard = 68748313 Then word_obj.Keyboard (1033) Else word_obj.Keyboard (1049)

‘если английский — переключили на русский и наоборот.

If word_obj.Documents.Count = 0 Then word_obj.Application.Quit SaveChanges:=wdDoNotSaveChanges

‘Проверили, если нет более документов — можем вообще закрыть приложение.

Set word_obj = Nothing ‘очистили память

Этот момент показывает наличие некоторых удобных, но недоступных Access, механизмов Word. Так что ждем. Вдруг и у Access такое будет возможно. Без WinApi.

Подведем итог всего, что тут написано.

Приложение Word достаточно сложно и имеет множество (мало сказано J ) элементов, способов и проч. Навигацию по документам можно легко осуществлять программно через метод range. Создание нового документа и передача в него данных из Access с использованием вышеприведенного метода сложно, однако при разработке четкого алгоритма позволит обойтись без лишнего шаблона. Доступ к механизмам замены, сортировки, и статистики можно также получить только через этот метод.

Остальные свойства/методы/элементы будут мною рассмотрены в дальнейшем.

С уважением, MAKC.

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

При написании этой статьи использовалась литература издательства BHV г. Санкт — Петербург.Серия «Мастер».

VBA для чайников (80 стр.)

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

Два остальных возможных решения для сохранения данных на диске сработают в любом приложении, поддерживающем VBA. Вы можете сохранять значения в реестре Window (и даже считывать их оттуда), используя инструкции Save Setting и Get Setting, а также сохранять данные в отдельном файле. Оба эти способа рассмотрены в главе 20.

Глава 15. Программирование на VBA в Word.

Объектная модель Word

Ключевые объекты Word: окна, выделения, диапазоны и объект Find

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

Методы и свойства для манипуляции с текстом

Поиск и замена текста с помощью VBA в Word

Изо всего набора приложений Office Word предлагает наиболее богатый набор средств программирования. Знакомство с объектами Word, такими как Range и Find, иногда оказывается рискованным, но это очень важно, если вы действительно хотите создавать VBA-процедуры, раскрывающие всю мощь Word. Именно об этом мы и поговорим в настоящей главе.

Объектная модель Word содержит так много объектов и их коллекций, что вам потребуется огромный лист бумаги, если вы захотите построить на нем иерархию всех этих объектов в графическом виде. Очевидно, что я смогу рассмотреть лишь малую толику от того колоссального количества объектов, свойств и методов, которые вы сможете использовать в своих программах. В настоящей главе освещены только наиболее важные приемы работы с Word VBA. Если вы хотите получить более подробные сведения, вам придется неоднократно обращаться к справочной системе.

Знакомство с объектом Application

Как и во всех других VBA-приложениях, ключевым в объектной модели Word является объект Application. Другими словами, этот объект содержит все остальные объекты Word. Поскольку объект Application занимает центральное место в программировании на VBA в Word, вам даже не придется явно указывать его имя при работе со многими важными объектами. Однако вам не следует забывать о роли, которую играет этот объект, поскольку он вам потребуется при работе со свойствами и методами самого приложения, а также при обращении к некоторым другим объектам. Например, приведенная ниже инструкция использует метод List Commands объекта Application:

Между прочим, метод List Commands создает новый документ и помещает в него таблицу, содержащую комбинации клавиш и команды меню Word. Если вы передаете методу List Commands значение True, новый документ содержит комбинации клавиш и команды меню Word. Передайте ему значение False, чтобы в нем перечислялись только команды.

Доступ к документам Word с помощью VBA

Если написанная вами VBA-процедура функционирует прямо в документе, вы должны указать объект этого документа непосредственно в коде, Часто вы сможете сделать это неявным образом, используя объект Selection, о котором я расскажу дальше в настоящей главе. Однако в остальных ситуациях вам придется явно идентифицировать целевой объект.

Читать еще:  Формула умножения в word

Работа с активным документом

Типичная VBA-процедура в Word выполняет все свои магические действия в том документе, который в данный момент открыт для редактирования. Для указания активного документа используется объект ActiveDocument. Например, приведенная выше инструкция просто закрывает активный документ:

Как видите, вам не нужно писать код для определения того, какой же документ редактируется в данный момент: достаточно просто использовать объект ActiveDocument.

Если вам необходимо работать с определенным документом, который сейчас не активен, вы должны указать его как члена коллекции Documents, состоящей изо всех документов, открытых в настоящее время в Word. Как и в случае с любой другой коллекцией объектов в VBA, вы можете обратиться к отдельному документу в коллекции, используя его заголовок, который в данном случае совпадает с именем файла (только именем файла, а не с полным путем к нему). Вот соответствующий пример;

Documents(«Toy Store News letter.doc»)

Поскольку вы не знаете точно имя файла целевого документа заранее, а пользователь может в любой момент его изменить, вам следует создать переменную, которая будет содержать имя файла. После этого вы можете использовать эту переменную для указания объекта документа, например, так: Documents (strDocName).

Вы также можете обратиться к документу по его индексному номеру. Следующая инструкция, например, обращается к третьему документу в коллекции Documents:

Несмотря на всю простоту, этот метод достаточно ограничен, поскольку вы редко когда знаете индексный номер документа, с которым хотите работать. При этом вам стоит узнать имя открытого документа. Например, следующая инструкция присваивает переменной имя файла второго открытого документа:

Для создания нового документа используйте метод Add коллекции объектов Documents. Используемый без каких-либо документов, метод Add создает новый документ, базирующийся на шаблоне Normal (Обычный). Для указания другого шаблона укажите путь к нему в качестве аргумента, как показано ниже:

Documents.Add template:= _

«C:WindowsApplication DataXMicrosoftHidden templates»

Для открытия существующего документа используйте метод Open коллекции объектов Documents. Конечно же, вам необходимо указать полный путь к документу, как показано ниже:

Documents.Open FileName:= _

«С:ToysToys for infants.doc»

Для активизации уже открытого документа используйте метод Activate коллекции объектов Documents. Предположим, что вам необходимо, чтобы ваша VBA-программа активизировала определенный документ, который в момент запуска программы может быть и открыт, и закрыт. Используйте код, подобный показанному ниже, для активизации открытого документа или открытия документа, если он еще не открыт:

Dim docFileName As String, docPath as String

docFileName = «Старые игрушки.doc»

For Each target Doc In Documents

If targetDoc.Name = docFileName Then

If targetDocIsOpen = True Then

Documents.Open FileName := docPath & docFileName

Поскольку каждый документ Word состоит из одного или нескольких разделов, вы можете ожидать, что Word VBA содержит коллекцию Sections и отдельные объекты Section для работы с этими элементами. Так оно и есть. Наиболее важное применение объектов Section — организация доступа к верхним и нижним колонтитулам (через объект Header Footer ). Вы можете добавлять новые разделы в документ, используя метод Add коллекции Sections или метод Insert Break объекта Range или Selection.

Открытие окон с помощью VBA

Каждый открытый документ содержит как минимум одно окно, а пользователь Word может открыть столько окон, сколько нужно для работы с любым документом. Каждое из подобных окон- объект с его собственными правами. В объектной модели Word объект Application содержит коллекцию Windows, содержащее все окна для всех открытых документов. Кроме того, каждый объект Document содержит свою собственную коллекцию объектов Windows.

Две основные причины работы с объектами Window в Word- контроль над внешним видом окна, а также манипулирование содержимым документа с помощью объекта Selection. Объект Selection я подробно рассмотрю в следующем разделе настоящей главы; здесь же я остановлюсь на приеме, позволяющем определить конкретное окно, а также познакомлю со свойствами, которые вы сможете использовать для определения внешнего вида окна.

Обращение к окнам из программного кода

Прямо из программного кода проще всего обращаться к тому окну, в котором открыт редактируемый документ во время запуска процедуры. Для указания окна используется объект ActiveWindow.

Для определения окна прямо в программном коде вам следует определить его как члена одной из коллекций Windows. При работе с глобальной коллекцией объектов Windows вам не нужно указывать собственно объект Application. При обращении к коллекции объектов Windows определенного документа, указывать имя объекта этого документа нужно обязательно. Вы можете идентифицировать окно по его имени или индексному номеру в коллекции. Имя окна совпадает с именем документа, который в нем отображается, за исключением того, что если для одного документа открыто несколько окон, после указания имени документа следует ставить точку с запятой, после которой указать номер окна.

Ниже приведены типичные ссылки для объектов Window.

Программирование на VBA в Word

Форматирование документа

Наиболее важной особенностью работы на VBA в Word является вставка текста в документ при работе с приложениями. Для этого служат объекты Range и Selection, которые являются главными для практически любых операций, которые можно выполнять с помощью Word VBA. Некоторые из этих действий можно применять к документам в целом, но в общем случае вам необходим диапазон или выделенная область, прежде чем вносить изменения. Мы, однако, рассмотрим действия с документом при его создании.

Открытый документ Word уже содержит объекты Range, соответствующие многим его элементам. Каждый абзац, таблица, ячейка таблицы, комментарий и т. д. определяют диапазоны. Например, для того чтобы вставить некоторый текст в уже существующий документ, необходимо прописать код:

Причем данная строка будет расположена в конце существующего параграфа. С другой стороны, используя объект Selection, можно также вставить некоторый текст в документ, используя метод Add и присвоение свойства Text объекту Selection:

If Documents.Count = 0 Then Documents.Add
Selection.Text = «Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, « + TextBox1.Text +», и отвечает запросам всех программистов!»

В результате выполнения данного программного кода в документе Word будет выведена строка: “Изучение работы с текстом в документе Word является важной составной частью умения программировать в VBA, Светлана, и отвечает запросам всех программистов!”.

Описание процедур

Private Sub CommandButton1_Click()
If Documents.Count = 0 Then Documents.Add
Selection.Text = «При прохождении тока напряжением в » + TextBox1.Text + «вольт попроводнику длиной » + TextBox4.Text + » метров, сечением » + TextBox3.Text + «кв. мм и удельным сопротивлением » + TextBox5.Text + » Ом*мм^2/м за » + TextBox2.Text + » секунд выделится » + TextBox6.Text + « джоулей теплоты»
Selection.Collapse direction:=wdCollapseEnd
End Sub

Private Sub CommandButton2_Click()
Unload Me
End Sub

Private Sub scet()
If IsNumeric(TextBox1.Text) = True And
IsNumeric(TextBox2.Text) = True And
IsNumeric(TextBox3.Text) = True And
IsNumeric(TextBox4.Text) = True And
IsNumeric(TextBox5.Text) = True And Not Val(TextBox4.Text) = 0 And Not Val(TextBox5.Text) = 0 Then rez = ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) * Val(TextBox3.Text)) / (Val(TextBox4.Text) * Val(TextBox5.Text))
TextBox6.Text = Str$(rez)
CommandButton1.Enabled = True
Else
TextBox6.Text = «»
CommandButton1.Enabled = False
End If
End Sub

При работе с текстом на рабочем листе Word необходимо знать следующие коды:

определение цвета
Selection.Font.Color =
wdColorRed – красный
wdColorDarkRed – бордовый
wdColorDarkTeal – бирюзовый
wdColorBlue – синий
wdColorGreen – зеленый
wdColorBlack – черный
wdColorOrange – оранжевый

определение жирности
Selection.Font.Bold =
wdToggle – жирность

определение начертания
Selection.Font.Italic=
wdToggle – курсив

определение выравнивания
Selection.ParagraphFormat.Alignment=
wdAlignParagraphRight – выравнивание по правому краю
wdAlignParagraphCenter – выравнивание по центру
wdAlignParagraphJustify – выравнивание по левому краю

вставка в текст конкретного предложения
Selection.TypeText Text:=»Пример работы с текстом»
вставка новой пустой строки
Selection.TypeParagraph
установка размера букв
Selection.Font.Size = 14

Одним из элементов оформления диалоговых окон является элемент управления Image (рисунок). Его основные свойства:

Autosize – изменяет размер рисунка на форме (автоматически или нет);

Picture – отображает графический файл, выводимый на форму;

pictureSizeMode – устанавливает масштабирование рисунка (не весь рисунок, вся поверхность объекта, целиком внутри объекта);

PictureAligment – устанавливает расположение рисунка внутри объекта (слева, справа, вверху, внизу);
pictureTilling – покрывает объект мозаикой из рисунка.

Данные свойства либо устанавливаются в окне свойств объекта, либо прописываются в листинге.

Примечание. При работе данного приложения все значения полей ввода должны быть числовыми. В VBA есть специальная функция для проверки того, является или нет введенная строка записью числа – IsNumeric. Для проверки отличия от нуля значений в последних двух полях ввода используется функция Val, которая переводит строковое выражение в числовое, если это строковое выражение содержит в своем начале цифры (или все состоит из них).

Функция Str делает преобразование, обратное тому, что производит Val, – конвертирует числовое значение выражения в строковое, что позволяет этому значению в дальнейшем обрабатываться как строке.

Таким образом, функции Val и Str преобразуют типы данных обрабатываемых ими переменных, соответственно, из строкового в числовой и из числового в строковый.

Создание кнопки или панели в Word

Назначить форме кнопку или пункт меню для непосредственного вызова приложения из Word нельзя – это можно сделать только для модулей. Поэтому нужно применить следующий способ. Создайте макрос (Меню + Insert + Module) в открытом проекте:

Переименуйте этот макрос по своему усмотрению, например Teplo. И выполните следующие действия:

1. Щелкните правой кнопкой мыши в любом месте панели инструментов.

2. В этом меню выберите команду Настройка (или Сервис + Настройка).

3. В диалоговом окне Настройка щелкните на ярлыке вкладки Команды.

4. Прокрутите список Категории вниз и найдите пункт Макросы. Выберите этот пункт. В списке «Сохранить в» выберите имя вашего документа, в котором создан макрос.

5. В правом окне найдите необходимый макрос (либо VBA-программу).

6. Перетащите имя этого макроса или программы на панель инструментов.

7. Создайте соответствующую надпись кнопки и, если нужно, рисунок (при помощи правой кнопки мыши).

8. Закройте диалоговое окно Настройка, чтобы завершить работу.

9. В результате будет создана кнопка запуска приложения.

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