Схема объектной модели word

Имя

Описание

Методы

Activate

Передает фокус
документу

AutoFormat

Автоматически
форматирует документ. Свойство Kindиспользуется для указания типа формата

CheckGrammar

Запускает проверку
правописания и грамматики для документа

CheckSpelling

Запускает проверку
правописания для документа

Close

Закрывает документ

ClosePrintPreview

Переходит из режима
предварительного просмотра к
предыдущему режиму. Исключение
возникает, если документ не находится
в режиме предварительного просмотра

CopyStylesFromTemplate

Копирует стили из
указанного шаблона в документ

CountNumberedItems

Возвращает число
маркированных или нумерованных
элементов и полей LISTNUMв документе

DetectLanguage

Анализирует текст
документа, чтобы определить язык, на
котором написан текст

DowngradeDocument

Изменяет формат
документа на формат документа Word
97-2003, чтобы его можно было редактировать
в предыдущей версии Microsoft Word

ExportAsFixedFormat

Сохраняет документ
в формате PDF или XPS

GoTo

Возвращает объект
Microsoft.Office.Interop.Word.Range, представляющий
начальное положение указанного
элемента, например, страницы, закладки
или поля

ManualHyphenation

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

PresentIt

Открывает Microsoft
PowerPoint с загруженным документом

PrintOut

Выводит на печать
целый документ или его часть

PrintPreview

Переключает в режим
предварительного просмотра

Range

Возвращает объект
Microsoft.Office.Interop.Word.Rangeв пределах
указанных положений начального и
конечного знака

Redo

Выполняет последнее
действие, которое было отменено
(обращает метод Undo)

Repaginate

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

ResetFormFields

Очищает все поля
форм в документе, подготавливая форму
для повторного заполнения

RunAutoMacro

Запускает автоматический
макрос, хранящийся в документе

Save

Сохраняет документ.
Если документ ранее не сохранялся,
выводится диалоговое окно Сохранить
как
, в котором пользователь должен
задать имя файла

SaveAs

Сохраняет документ
с новым именем или форматом. Некоторые
аргументы для данного метода
соответствуют параметрам в диалоговом
окне Сохранить как

Select

Выделяет весь
документ

SetDefaultTableStyle

Задает стиль таблицы
для использования во вновь созданных
таблицах в документе

Undo

Отменяет последнее
действие или последовательность
действий, отображаемых в списке
Отменить. Значениеtrueвозвращается, если действия были
успешно отменены

UndoClear

Очищает список
действий, которые можно отменить для
документа. Соответствует списку
элементов, который отображается при
нажатии стрелки рядом с кнопкой
Отменитьна панели инструментовСтандартная

Unprotect

Удаляет защиту
документа

WebPagePreview

Отображает окно
предварительного просмотра документа
в том виде, как она будет выглядеть
при сохранении в качестве веб-страницы

Свойства

ActiveWindow

Возвращает объект
Window, представляющий активное окно

Application

Возвращает объект
Application, представляющий создателя
документа

AttachedTemplate

Возвращает или
задает коллекцию Template, в которой
хранятся все шаблоны, присоединенные
к документу

AutoHyphenation

Возвращает или
задает значение, указывающее, включена
ли функция автоматического переноса
слов в указанном документе

Background

Возвращает
или задает Shape,
представляющий фоновое изображение
в указанном документе

Bookmarks

Возвращает
коллекцию Microsoft.Office.Interop.Word.Bookmarks,
в которой хранятся все закладки в
документе

Characters

Возвращает
коллекцию Characters,
в которой хранятся знаки в документе

CommandBars

Возвращает
коллекцию CommandBars,
представляющую строку меню и все
панели инструментов в Word

Comments

Возвращает
коллекцию Comments,
в которой хранятся все примечания в
документе

Container

Возвращает
приложение-контейнер для документа

Creator

Возвращает приложение,
в котором был создан документ

DefaultExtension

Получает расширение
по умолчанию для данного объекта
Document

DefaultTableStyle

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

DefaultTabStop

Возвращает
или задает интервал в пунктах между
позициями табуляции в документе

Extension

Получает настраиваемое
расширение для данного объекта
Document

FormFields

Возвращает
коллекцию FormFields,
хранящую все поля форм в документе

FullName

Возвращает имя
документа, включая путь к диску или
Web-путь

GrammarChecked

Возвращает
или задает значение, указывающее,
была ли для документа выполнена
проверка грамматики

GridDistanceHorizontal

Возвращает
или задает интервал по горизонтали
между невидимыми линиями сетки,
которые используются в документе
Word при рисовании, перемещении или
изменении размеров автофигур или
знаков восточно-азиатских языков

GridDistanceVertical

Возвращает
или задает интервал по вертикали
между невидимыми линиями сетки,
которые используются в Word при рисовании,
перемещении или изменении размеров
автофигур или знаков восточно-азиатских
языков в документе

HasPassword

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

Hyperlinks

Возвращает
коллекцию Hyperlinks,
хранящую все гиперссылки в документе

HyphenateCaps

Возвращает
или задает значение, указывающее,
можно ли переносить слова из прописных
букв

HyphenationZone

Возвращает или
задает ширину области переноса в
пунктах

JustificationMode

Возвращает или
задает интервал между знаками в
документе

LanguageDetected

Возвращает или
задает значение, указывающее, удалось
ли приложению Word определить язык
текста в документе

ListParagraphs

Возвращает коллекцию ListParagraphs,
хранящую все нумерованные абзацы в
документе

Lists

Возвращает коллекцию Lists,
хранящую все форматированные списки
в документе

ListTemplates

Возвращает коллекцию ListTemplates,
в которой хранятся все форматы списков
для документа

Name

Возвращает имя
документа

OMathFontName

Возвращает или
задает имя шрифта, используемого в
документе для отображения формул

OMathJc

Возвращает
или задает значение, определяющее
выравнивание по умол-чанию (по левому
краю, по правому краю или по центру)
для формул

OMaths

Получает коллекцию
объектов OMath в документе

OpenEncoding

Возвращает кодировку,
используемую для открытия документа

Paragraphs

Возвращает
коллекцию Paragraphs,
хранящую все абзацы в документе

Parent

Возвращает родительский
объект документа

Password

Задает пароль,
который должен быть введен для открытия
документа

Path

Возвращает путь к
диску или Web-путь
документа

Saved

Возвращает или
задает значение, указывающее, не
изменился ли документ со времени
последнего сохранения

SaveEncoding

Возвращает или
задает кодировку, используемую при
сохранении документа

SaveFormat

Возвращает формат
файла документа

Sections

Возвращает коллекцию Sections,
хранящую разделы в документе

Sentences

Возвращает
коллекцию Sentences,
хранящую все предложения в документе

Shapes

Возвращает
коллекцию Shapes,
хранящую все объекты Shape
в документе

ShowGrammaticalErrors

Возвращает
или задает значение, указывающее,
были ли граммати-ческие ошибки в
документе помечены волнистой зеленой
линией

ShowRevisions

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

ShowSpellingErrors

Возвращает
или задает значение, указывающее,
подчеркивает ли приложение Microsoft Word
орфографические ошибки в документе

SnapToGrid

Возвращает
или задает значение, позволяющее
определить, выполняется ли автоматическое
выравнивание по невидимой сетке для
автофигур и знаков восточно-азиатских
языков при их рисовании, перемещении
или изменении их размеров в документе

SpellingChecked

Возвращает
или задает значение, указывающее,
была ли выполнена проверка правописания
в документе

SpellingErrors

Возвращает
коллекцию ProofreadingErrors,
в которой хранятся слова с орфографическими
ошибками в документе

Styles

Возвращает коллекцию Stylesдля документа

Tables

Возвращает коллекцию Tables,
хранящую все таблицы в документе

TablesOfFigures

Возвращает коллекцию TablesOfFigures,
хранящую таблицы фигур в документе

TrackRevisions

Возвращает или
задает значение, показывающее,
отслеживаются ли изменения в документе

Windows

Возвращает коллекцию Windows,
в которой хранятся все окна документа
(например, Sales.doc:1 и Sales.doc:2)

WritePassword

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

WriteReserved

Возвращает значение,
которое позволяет определить, защищен
ли документ паролем на запись

События

ActivateEvent

Происходит, когда
документ становится активным окном

BeforeClose

Происходит
непосредственно перед закрытием
документа

BeforePrint

Происходит перед
выводом документа на печать

BeforeSave

Возникает перед
сохранением документа

BuildingBlockInsert

Происходит при
вставке в документ стандартного блока

CloseEvent

Происходит при
закрытии документа

Deactivate

Происходит, когда
активный документ теряет фокус

New

Возникает при
создании нового документа

Open

Возникает при
открытии документа

SelectionChange

Возникает при
изменении выделения в окне документа

Startup

Происходит после
запуска документа и всех кодов
инициализации в сборке

WindowSize

Возникает после
перемещения окна документа или
изменения его размеров

Цель занятия – разбор
записанного макроса и уяснение деталей его работы. Задача
усложняется тем, что вы еще не знакомы с программированием. Это не страшно,
собственно исправление макроса мы предварим подробным его разбором – в процессе
чего вы узнаете очень много нового. Имейте в виду, что для эффективной работы
вам надо будет изучить весь учебник, не ограничиваясь лишь первой частью…

Введение в программирование

В каждом приложении MS Office
любой версии присутствует встроенное средство для создания и обработки
действительно мощных макросов. Как основа используется язык программирования, называемый Visual Basic for Applications (VBAVisual Basic для приложений).

Что же такое язык программирования и для чего он нужен?

Сложнейшее достижение современной
цивилизации – компьютер, без сомнения, изменило жизнь людей. Мало задач, где
нельзя пока его применить. Но сам по себе никакой, даже самый совершенный,
компьютер не сделает ничего. Это – аккуратный и скрупулезный исполнитель,
которому надо подробным образом объяснить, что же от него требуется. Средством
для такого общения стали языки программирования.

Язык программирования можно
определить как:

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

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

Разновидности программ

Среди огромного разнообразия существующих программ можно
смело определить следующие группы:

Операционные системы – представляют собою совокупность
программных средств, обеспечивающих работу компьютера и взаимодействие его с
пользователем, другими компьютерами и устройствами. Например – популярные Windows и MS DOS.

Системные программы – предназначены для непосредственного
управления устройствами компьютера (но не для взаимодействия с пользователем).
Таковы, к примеру, драйверы устройств – небольшие программки, управляющие
дисководами, принтером, другими устройствами.

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

Языки – условное название
разнообразной группы программ, предназначенных для создания программ. Языки
также можно разделить на категории – языки высокого уровня, имеющие понятный
синтаксис и удобные в работе, но создающие довольно громоздкие и медленные
программы (таковы, к примеру, семейства языков Basic, Java, Delphi, отчасти языки C/C++) и
языки низкого уровня, продуцирующие быстрые и компактные продукты, но сложные
для изучения и работы (отчасти C/C++, ассемблер). К языкам можно
условно отнести и различные средства, предназначенные для создания справочных
систем, иллюстраций, видео-  и
аудиофрагментов.

BASIC, VB, Диалекты VB

Среди множества языков программирования семейство языков Basic выделяется своей
простотой и доступностью для программиста.

Язык Basic (Beginner’s All-purposes Symbolic Instruction CodeВсецелевой Символический Код для Начинающих, буквальный перевод
сокращения – Базовый, Основной) был
создан в
1963 г. профессорами Дартмутского университета Дж. Кемени и Т. Курцем для
обучения студентов. Благодаря своим преимуществам язык Basic быстро завоевал широчайшее
признание в среде профессиональных и полупрофессиональных программистов.

Языки семейства Basic отличаются простотой составления
программ, быстротой и легкостью отладки и гибкостью в использовании.

Современное поколение языков Basic  имеют в названии слово Visual (Визуальный, Видимый). Дело в том, что,
начиная с версии языка №1, появившейся в 1991 году, в него встроена очень
важная особенность, позволившая языку получить вторую жизнь – так называемое
визуальное редактирование, то есть возможность видеть внешний вид будущей
программы еще на этапе разработки и изменять его простыми, интуитивно понятными
средствами. Более подробно визуальное редактирование будет рассмотрено ниже.

Язык Visual Basic
специально создан для программирования приложений для популярной и потенциально
мощной операционной системы Windows
фирмы Microsoft.

Семейство Visual Basic сегодня состоит из трех
сходных между собой диалектов языка: собственно Visual Basic, Visual Basic for Application – язык,
встроенный в приложения MS Office
и VBScript, применяемый
для программирования в Internet.

В MS Office
97 встроена версия VBA
5.0, в MS Office
2000 – VBA 6.0, в
последующих версиях (а на момент написания книги существовали MS Office XP и 2003) – VBA 6.3. Версии, конечно же,
отличаются друг от друга, но на нашем уровне изучения различия эти несущественны,
и останавливаться на них мы не будем.

Отличительные особенности VBA.

Прежде всего, конечно,
простота и скорость построения маленьких утилит-макросов. Затем – простота
отладки и использования. И, конечно же, способствует распространению VBA то, что он встроен в один
из популярнейших офисных пакетов.

Но и недостатки у VBA есть. Так, программа на VBA не может существовать отдельно от документа приложения Office. Ближайшее следствие
этого – низкая скорость выполнения.

Не так много возможностей приложений Office доступны для VBA, сложные задачи приходится решать
необычными, «экстремальными» способами (это присуще и другим диалектам VB). Наконец, не вполне
адекватная документация, прилагаемая к VBA фирмой-производителем, зачастую отпугивает начинающих
пользователей.

Тем не менее, VBA остается очень полезен для тех, кто хотел бы ускорить и
упростить работу в приложениях MS Office.

Три составляющие изучения языка, IDE

Изучение любого языка включает в себя изучение трех его
«ипостасей», неотделимых друг от друга.

Во-первых, это – синтаксис, или правила построения
«фраз» и использования «слов».

Во-вторых – лексика,
или словарно-понятийный набор терминов, используемых данным языком.

И, в-третьих – средства языка, используемые для создания текстов
(читай – программ), для записи мыслей автора на каком-то носителе.

Для человеческих языков средствами будут, к примеру, ручка и бумага
в Европе, кисть, тушь и бумага в Китае, печатная машинка и т.п. У компьютерных
языков средства – это специальные программы, иногда не совсем верно называемые
языками.

Современные языки имеют сложные и мощные средства,
предназначенные для создания, отладки, документирования и проектирования
больших приложений, над которыми работают коллективы программистов. Эти
программные комплексы сокращенно называются IDEIntegrated Development Environment, – Интегрированная
Среда Разработки
.

Описание IDE VBA

Собственную IDE
имеет и VBA. Для
успешного продолжения работы следует провести обзор IDE.

Перейдем к практическому освоению среды программирования языка VBA.

Вызвать IDE VBA вы можете, выполнив
команду СервисМакросРедактор Visual Basic.
Проще и быстрее нажать [Alt]+[F11].

Не забудьте, что мы работаем с приложением Word. Если надо – запустите Word, откройте документ,
созданный нами раньше.

  • Одним из описанных способов вызовите IDE VBA.

Перед вами появится окно:

Именно здесь проводится основная работа с макросами VBA.

Как видите, окно IDE VBA
имеет определенное сходство с другими приложениями Office. Есть заголовок, в котором,
помимо имени приложения, видно название открытого документа. Ниже – строка
меню. Далее – панель кнопок. В IDE VBA
панель кнопок называется ToolbarПанель Инструментов.

Ниже слева специальное окно, называемое Project ExplorerПроводник Проекта (на
рисунке его заголовок ProjectProject).

Далее, под ним окно PropertiesСвойства. Его заголовок
здесь Properties-NewMacros.

Назначение этих окон мы разберем позже.

Справа – большая область, где будет происходить основная работа.
Подробнее – потом.

Заметьте сразу, что IDE допускает собственную настройку для удобства работы. Так,
внутренние окна IDE
можно перетаскивать, «ухватив» мышью за заголовки. При приближении к границе IDE внутренние окна
«прилипают» к ним. Двойной щелчок по заголовку внутреннего окна переводит его в
более привычный вид, повторный двойной щелчок вновь превращает в «прилипающее».
Доступна настройке и Toolbar – щелчок правой кнопкой над Toolbar вызывает
небольшое меню, выбрав в котором пункт Настройка… (в некоторых версиях Customize…) вы получаете
диалоговое окно, предоставляющее возможность настроить Toolbar по своему
вкусу. Подробно мы рассматривать это не будем, настройка достаточно интуитивна
и понятна.

Начало работы с макросом

Приступим к изучению созданного ранее макроса.

Для
этого следует открыть его в IDE.
Подобные действия совершаются при помощи Project Explorer.

  • Увеличьте окно Project Explorer, к примеру,
    переведя его в «плавающее» состояние двойным щелчком по заголовку, а затем мышью
    «растяните» окно. Это делается лишь для удобства, в дальнейшей работе вы вольны
    размещать это окно так, как захотите.

Вы увидите что-то вроде этого:

Как видно, строение этого окна напоминает левую панель
проводника Windows. И
действия производятся схожие – навигация по компонентам проекта.

Если
по какой-то причине окна Project Explorer нет, вызовите его, выполнив команду меню IDE VBA ViewProject Explorer

Проектом называется совокупность
составных частей документа (в данном случае – Word). Проект самодостаточен, не требует
каких-то дополнительных компонентов для функционирования. Как правило, проект
будет содержать минимум один документ и может содержать модули макросов. Физический
носитель проекта – шаблон Word
(файл с расширением .dot)
или собственно документ Word.

Определение из справки VBA звучит так: «Проект есть набор модулей». Типы и особенности
модулей разберем позже.

В основном окне Project Explorer мы видим «древовидную» структуру. Основные узлы (названия которых выделены
жирным) и есть обозначения проектов.

На рисунке в окне Project Explorer содержится два проекта, один под названием Normal, а другой – Project (Макрос_Word_1).
Соответственно, первый из них представляет содержимое шаблона Normal.dot,
который по умолчанию является основой для создаваемых документов Word. Второй проект
представляет созданный нами документ. В скобках – имя файла, присвоенное вами
при сохранении документа Word.

В составе проекта отображаются папки, содержащие другие
объекты. В нашем случае первая папка (Microsoft Word ObjectsОбъекты MS Word) включает
объект под названием ThisDocumentЭтотДокумент. Данный
объект представляет созданный нами документ.

Вторая папка (ModulesМодули)
включает объект под названием NewMacrosНовыйМакрос. Именно этот компонент
содержит созданный нами макрос. Вообще, вновь создаваемые макросы будут
помещаться в этот компонент. Затем вы можете их перемещать.

Вверху окна Project Explorer видимы три кнопки. Левая
предназначена для вызова кода объекта (что это – мы вскоре узнаем), средняя –
для вызова «визуального» вида объекта, правая кнопка переключает вид дерева
проектов.

  • Нажмите правую кнопку вверху окна Project Explorer.

Как видите, дерево изменилось:

Небольшие проекты удобнее просматривать таким образом. Если
хотите, верните окно Project Explorer к прежнему виду.

  • Двойным щелчком по заголовку превратите окно Project Explorer в «прилипающее».
    Пускай так и остается.

Убедитесь, что выделен компонент NewMacros. Если надо – щелкните
на нем.

  • Щелкните по левой кнопке вверху окна Project Explorer (альтернатива –
    двойной щелчок по выделенному компоненту).

Появится окно кода модуля
(быть может, оно уже было открыто).

Основная часть окна занята пока непонятным для вас текстом.
Это и есть код макроса, записанного нами.

Вверху окна два падающих
списка. Левый (с надписью (General)Основной [раздел]) содержит список объектов модуля (подробнее –
потом), а правый (с надписью СтильСноска) – список макросов, содержащихся в модуле. Как из этого
следует, в модуле может быть несколько макросов.

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

Если почему-то в верхнем правом списке надпись, отличающаяся от
имени созданного нами макроса – исправьте ситуацию, выберите в списке надпись СтильСноска.

Итак, перейдем к рассмотрению кода макроса.

Разбор кода макроса

В окне кода мы видим несколько строк текста. Это – код макроса, то есть собственно инструкции языку VBA, описывающие действия, которые следует произвести.

Здесь следует сделать пояснение. Любой текст, размещенный в окне
кода, будет восприниматься языком VBA как инструкции к действию. Можно сказать, что программирование
на VBA сводится к
написанию текста в окне кода.

Первая строка выглядит так:

Sub СтильСноска()

Это – заголовок макроса.

Последняя строка макроса:

End Sub

Найдите эти строки в окне кода.

Эти две строки обязательны, они ограничивают макрос.

Итак, структура макроса всегда
должна выглядеть так:

Sub
<имя_макроса>

.

.

End Sub

Слово Sub – сокращение от англ. SubRoutine – ПодПрограмма.

Подпрограмма – есть логически завершенная
часть программы, выполняющая какие-то определенные действия.

Другое название подпрограммы, принятое в
терминологии VBA – процедура.

Таким образом, макрос, по сути, есть подпрограмма. Отличительная
особенность макросов – автоматическая запись средствами Word. Кроме того, макросы Word (и других приложений,
работающих с VBA) не
могут составлять отдельную программу, а содержатся в документах Word (или других приложений).
Далее мы будет употреблять термины «макрос», «процедура» и «подпрограмма» как
равнозначные.

<имя_макроса> (в нашем случае – СтильСноска)
– уникальный в рамках проекта идентификатор. Это значит, что именно по имени
язык VBA определяет, с
каким объектом производится работа. Отсюда следует, что внутри проекта не
должно быть объектов, в том числе макросов, с одинаковыми именами.

Правила именования языка VBA

Имя объекта в VBA всегда представлено одним словом.
Составлять имя могут буквы (предпочтительно английские), цифры и знак
подчеркивания. Начинаться имя всегда должно с буквы.

Язык VBA не
производит различия между регистром символов. То есть, имена СтильСноска, стильсноска и СТИЛЬсноска для VBA совершенно одинаковы. Будьте внимательны и помните об этом!

Слово End переводится с англ. как Конец. Таким
образом, строка

End Sub

значит Конец Подпрограммы.

Первая и последняя строки процедуры ограничивают ее, предоставляя
возможность языку VBA
воспринять код правильно.

Строки между первой и последней составляют тело процедуры.

Именно здесь находятся значимые инструкции языка.

Каждая строка кода VBA
описывает какое-то одно действие, производимое языком.

Иногда строки объединяются (для этого используется символ : – двоеточие), но это ухудшает читаемость кода, не давая никаких преимуществ.

Первые несколько строк тела нашего макроса начинаются с
символа апострофа () и содержат текст, поясняющий макрос. Эта конструкция
называется комментарий.

Комментарий – произвольный текст, поясняющий
код. Комментарием считается любая строка, начинающаяся с апострофа ()
– и до конца строки. Язык VBA
игнорирует подобные строки, они предназначены лишь для удобства программиста.

Вы видите, что созданные автоматически комментарии содержат
текст, который отображался в диалоговом окне, возникавшем в начале записи
макроса.

Собственно код начинается строкой

Selection.Find.ClearFormatting

А вот для дальнейшего понимания следует сделать большое
отступление и рассмотреть принципы программирования на VBA.

Объект

В отличие от многих других языков, VBA работает согласно объектной
парадигме. Это значит, что VBA
манипулирует объектами.

Объект – некая уникальная сущность, имеющая
собственные количественные и качественные характеристики.

Подробнее рассмотрим это абстрактное – и непонятное –
определение.

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

Возьмем как пример объекта какого-то (реального) человека.
Очевидна его уникальность – другого такого нет и быть не может. Идентификатором
человека может служить номер паспорта (так как имя с фамилией
зачастую повторяются).

Характеристики реального объекта-человека эмпирически можно
разделить на несколько групп.

Первая группа определяет объект как статическую сущность.
Пример – пол, рост, вес, возраст
данный момент времени – величины фиксированные).

Характеристики, определяющие объект как статическую сущность, в
объектной парадигме называются свойствами.

Свойство есть качественно-количественная
статическая характеристика объекта.

Кроме свойств, объект имеет поведенческие характеристики.

Их следует разделить на две группы.

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

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

Метод есть некоторое действие,
производимое объектом.

Рассмотрим последний пример – старения человека. В результате будет
изменяться свойство данного человека – возраст. Таким образом, свойства и
методы зачастую бывают тесно связаны, и не всегда возможно четко их разделить.

Вторая группа поведенческих характеристик объекта более
приближена к реальности. Как в «настоящем» мире, так и во «вселенной» программы
объекты не существуют отдельно, они всегда взаимодействуют друг с другом.

Реакция объекта на внешнее воздействие называется обработкой события.

Событие есть действие, производимое на
данный объект каким-то внешним объектом. Обработка события есть реакция объекта
на событие.

Как видно, методы и события схожи. Можно сказать так, что
методы направлены вовне объекта, результатом метода будет «раздражение» другого
объекта. А событие направлено извне объекта внутрь его и обрабатывается как
реакция на внешнее действие.

С уровня абстракций перейдем к понятиям VBA.

Синтаксис объектов. Объектная модель

Рассмотрим синтаксис описанных понятий.

Объект в коде VBA
обозначается именем.

Имя является уникальным идентификатором объекта (в
рамках проекта
, то есть не запрещено в других проектах иметь объекты с
такими же именами).

Правила именования объектов такие же, как и при именовании
процедур, рассмотренные выше.

Свойства и методы объектов обозначаются
так:

<объект>.<свойство(метод)>

То есть имя объекта отделяется точкой от имени свойства или
метода.

Синтаксис событий мы опишем потом.

Как мы уже разобрали, свойства описывают некоторые статические
атрибуты объекта. Свойства, таким образом, могут иметь тип. У
объекта-человека свойство возраст имеет тип целого числа («Сколько
лет?»), хотя может также выражаться и дробным числом. Свойство цвет_волос имеет
тип цвета.
А свойство пол может принимать одно значение из предопределенного
списка, который можно назвать вид_пола. Тогда свойство пол будет иметь тип вид_пола. А свойство профессия – тип вид_профессии.

А теперь определим тип свойства супруг.
Очевидно, что тип этого свойства – человек.

У свойства личный_транспорт может быть тип автомобиль, велосипед и др. Свойство жилище может иметь типы квартира, дом (и др.).

Таким образом, типом свойства может быть другой объект. И описать,
предположим, цвет волос жены некоего Николая можно так:

Николай.жена.цвет_волос

Подобные конструкции часты в программах VBA.

Предположим, что этот Николай – работник некоего Учреждения.
Тогда получим:

Учреждение.Николай.жена.цвет_волос

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

В рассмотренной нами ранее трехчленной схеме строения языка
(синтаксис-лексика-средства) объектная модель соответствует лексике языка, его
словарному запасу.

Все приложения MS Office имеют собственные объектные модели. Так, существуют объектные
модели Word, Excel, PowerPoint и др. Есть объектная модель MS Office как интегратора
приложений.

Получение
информации об объектной модели

Для работы с VBA
необходимо иметь представление об объектной модели приложения, с которым
предполагается работать.

Информацию о структуре объектной модели вы можете получить
из нескольких источников.

Во-первых, разнообразная литература учебного и справочного
характера. Преимущество – «бумажная» книга, которую можно изучать не только на
мониторе компьютера, но и в более удобных условиях. Недостаток – принципиальная
невозможность всестороннего охвата материала по причине большого объема.

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

Попробуйте вызвать справку VBA.

  • Запустите Word (если он еще не запущен).
  • Вызовите IDE VBA (способ описан ранее, вспомните пройденный
    материал).
  • Нажмите [F1].

Если попытка закончилась неудачей – скорее всего, при
установке MS Office
справка по VBA не была
установлена. При установке «по умолчанию» справка VBA не устанавливается. В таком случае
следует заново запустить установку MS Office и «доустановить» справку VBA. Если вы не справляетесь с этой
задачей – обратитесь к специалисту, обслуживающему ваш компьютер.

Преимущество этого способа – практически полный охват
материала. Недостаток: справка VBA
написана по-английски, только в версии MS Office 97 справка частично русифицирована. Второй недостаток –
недостаточная наглядность. Начинающему зачастую очень сложно отделить важное от
второстепенного, понять различия между, на первый взгляд, похожими сущностями.
Тем не менее, справка MS  Office остается основным источником информации, далее мы
поработаем с ней.

В-третьих, много данных можно получить, используя компонент IDE VBA, называемый Object BrowserПросмотрщик объектов.
С его помощью можно получить схему атрибутов объекта и понять принципы работы с
ним даже при полном отсутствии справки. Далее мы познакомимся с ним ближе.
Преимущество Object Browser – возможность получения информации о любых объектах,
с которыми вообще способен работать VBA. Недостаток – специфичность и краткость этой информации, для
понимания ее требуется определенный навык работы.

В-четвертых, источником информации могут служить данные Internet. Есть множество
сайтов, как русскоязычных, так и иностранных, где вы можете получить
информацию. Недостаток – как правило, рассматриваются какие-то конкретные
вопросы программирования, информации для начинающих мало. Кроме того, бывает очень
сложно найти ответ именно на тот вопрос, который в данный момент вас
интересует…

Изучение объектной модели Word

Итак, перейдем к изучению объектной модели Word.

  • Запустите Word, если вы еще не сделали этого.
  • Откройте «стендовый» документ, если он еще не
    открыт.
  • Включите IDE VBA.
  • Поместите курсор (одиночным щелчком или при помощи
    клавиатуры) на слове Selection в первой строке кода, которая выглядит так:

Selection.Find.ClearFormatting

  • Нажмите [F1].

Перед вами – справка VBA, уже открыта страница с описанием выбранного термина. Это –
довольно удобный способ поиска информации о словах языка.

Но мы хотим провести обзор Word в целом.

  • В левой части окна справки перейдите на вкладку Содержание, в ее верхнюю часть.

Вы увидите нечто, подобное этому:

  • Щелкните на строке Microsoft Word Objects (четвертая сверху на данном рисунке).

В правом, основном окне справки появится следующее:

Если одного щелчка оказалось недостаточно, сделайте двойной щелчок
на пункте в левом списке. Способы работы со справочной системой могут слегка
отличаться в зависимости от версии.

Это – схема объектной модели Word.

  • Попробуйте перемещать курсор мыши.

Над прямоугольниками с надписями он меняет форму. Это значит, что
щелчок здесь перенесет вас в соответствующий раздел справки.

Возле некоторых прямоугольников справа находятся
треугольнички-стрелки (как возле заголовка AutoCorrect на рисунке). Щелчок
на стрелке откроет «продолжение» дерева объектной модели, не поместившееся на
этой схеме.

Переходить обратно в предыдущий раздел справки проще всего так.

  • Щелкните (в правом окне справки, где-нибудь там,
    где нет ни текста, ни рисунков) правой кнопкой мыши.
  • В появившемся контекстном меню выберите пункт Назад – как правило, этот пункт вверху контекстного
    меню.

Также можно переходить при помощи кнопок вверху окна справки
(кнопки со стрелками).

  • Вернемся к разделу, который появился в самом
    начале, при первом вызове справки.

Перед вами раздел:

Вверху заголовок, описывающий раздел. Здесь – Selection< Property, Свойство Selection (ранее мы
рассматривали свойства и их роль в VBA).

Ниже подзаголовки: See AlsoСмотри Также, ExampleПример, Applies ToПрименяется С (чем-то). Щелчком на одном из этих заголовков вы
можете перейти в соответствующий раздел.

  • Щелкните на подзаголовке See Also. Появится окно выбора:

Появление подобного диалога происходит, когда возможно
несколько ответов на интересующий запрос.

Для перехода – выберите одиночным щелчком мыши строку и нажмите [Enter].

Для отмены выбора нажмите [Esc].

  • Уберите окно выбора, нажав [Esc].

Ниже в окне справки – собственно описание термина, для которого
была выбрана справка. Как видите, в тексте также есть гиперссылки, обычно они
другого цвета, чем основной текст справки, и, как правило, подчеркнуты. Щелчком
на гиперссылке вы совершите переход в другой раздел.

  • Прочитайте раздел справки.

Как видите, мы перешли немного не туда. Данный раздел
относится к свойству Selection,
тогда как нас интересует соответствующий этому свойству объект.

Щелкните на гиперссылке Selection в тексте раздела.

Перед вами новая страница:

Перед вами – гораздо более пространный раздел, описывающий нужный
нам объектSelection. Изменились подзаголовки раздела. Теперь, как
видите, вы можете получить информацию о свойствах (Properties) и методах
(Methods)
данного объекта. Подзаголовок событий (Events) другого цвета – события
объектом Selection не обрабатываются.

Ниже – прямоугольники-заголовки, с помощью которых вы можете
переходить на «родственные» разделы. Как видите, появился заголовок Multiple ObjectsМножественные Объекты. В
данном случае верхний заголовок обозначает, что объект Selection может
содержаться в нескольких разных объектах объектной модели. Нижний заголовок Multiple Objects обозначает то, что сам объект Selection содержит несколько
разных объектов. Щелчок на заголовке вызовет окно выбора.

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

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

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

Поэтому мы должны сделать обзор объектной модели Word.

Обзор объектной модели Word

Объектная модель Word имеет «древовидную» структуру и состоит из множества объектов.
Здесь рассматриваются лишь основные, и то – вкратце. Наша цель – научиться думать,
а не бездумно заучивать перевод справки VBA.

Application

Основной (иначе – корневой) объект Word – Application (Приложение).

Объект Application представляет само приложение Word.

Зачастую, и, как правило, этот объект не указывается явно
при написании кода, он подразумевается.

Объект Application сам по себе содержит немного такого, что могло бы
нас заинтересовать. Обычно он используется как «диспетчер» для управления
другими объектами. Также вы будете использовать объект Application для
управления приложением из другого приложения. Например, макрос, написанный для Excel, может вызывать Word для каких-то действий по
обработке текста.

Как видно в разделе справки Microsoft Word Objects, объект Application содержит множество
других объектов. Легко запутаться в этом обширном дереве.

Основные объекты, интересные для начинающих программистов VBA – объекты Document и Selection.

Document

Объект Document (Документ) – один из основных
объектов Word.

Он представляет собственно документ как
совокупность текста, рисунков, таблиц и др.

Одновременно может быть открыто несколько документов. Тот, с
которым происходит работа в данный момент (тот, где находится текстовый курсор,
обычно выглядящий как мигающая вертикальная черточка) для удобства именуется ActiveDocumentАктивныйДокумент.

Набор из открытых в данный момент документов имеет в объектной
модели Word собственное
имя – Documents (Документы). Этот набор
является самостоятельным объектом и иногда с ним приходится работать отдельно.

Вложенные объекты, интересующие нас, называются Paragraph и Range.

Paragraph

Объект Paragraph (Параграф, Абзац) представляет абзац текста.

Этот объект успешно применяется при форматировании текста. Если вы
пользовались стилями, то уже работали с Paragraph, не подозревая об этом.

Набор из нескольких абзацев документа образует набор Paragraphs (Параграфы, Абзацы). Этот набор является самостоятельным объектом, иногда с
ним работают отдельно.

Range

Как написано в справке VBA,

объект Range (Регион) представляет собою непрерывную
область в документе

 – не более и не
менее.

Масштаб объекта Range может быть самым разным. Он может представлять как целый
документ, так и любую его часть, и даже быть пустым, не содержа ничего.

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

Имеются наборы Range, используемые для упрощения
работы

  • Sentences (Фразы, Выражения).
    Этот набор содержит все предложения текста.
  • Words (Слова). В этом наборе –
    все слова текста.
  • Characters (Символы, Знаки) – все символы текста (буквы, цифры, знаки препинания).
Selection

Объект Selection (Выделение, Выбранное).

Представляет собой выбранную (выделенную)
область в окне документа.

Данный объект может быть выделенным участком текста, или быть
«пустым», соответствуя положению текстового курсора. Отличие от Range – объект Range не обязательно выделен. Объект Selection чаще применяется при
операциях с участием буфера обмена, при перемещениях в тексте и др. При записи
макросов средствами Word
(как мы сделали ранее) вы всегда будете встречать объект Selection.

Наборов, содержащих объект Selection, в Word нет.

Объект Selection, также как и объект Document, содержит
объекты Paragraph и Range.

Схема объектной модели Word

Эту основную структуру объектной модели Word можно наглядно представить так:

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

Разбор макроса

Наконец-то мы начинаем разбор созданного нами макроса.

Вернемся к созданному нами макросу.

  • Запустите, если нужно, Word.
  • Откройте «стендовый» документ.
  • Вызовите IDE VBA.

Перед вами – окно кода созданного макроса.

Мы уже разбирали структуру макроса, если надо – повторите материал.

Первая строка кода:

Selection.Find.ClearFormatting

Вспомните пройденный материал и разберитесь, что здесь
написано.

В этой строке кода макрос обращается к атрибуту ClearFormatting свойства Find объекта Selection.

Попробуем интуитивно понять смысл этой строки.

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

Selection.Find.ClearFormatting =
<значение>

или

<значение> =
Selection.Find.ClearFormatting

Можно сделать вывод, что ClearFormatting – не свойство. А
раз так, то это – метод.

Манипуляция значениями свойств и других сущностей, которые могут
иметь значения, происходит при помощи знака присваивания =.

Подобные конструкции интуитивно понятны и не требуют
дополнительного разъяснения. Так, строку

икс = 35

можно описать «человеческим» языком так:

икс равен (значению) 35

Далее. ClearFormatting выступает атрибутом сущности Find. Как мы
определили ранее, атрибуты-методы имеют только сущности-объекты.

Значит, Find есть объект.

Но, согласно имеющейся конструкции, этот объект является
атрибутом объекта Selection.

Итак, строка

Selection.Find.ClearFormatting

означает, что происходит вызов метода ClearFormatting объекта Find,
содержащегося в объекте Selection.

Объект Find, блок With

В сделанном раньше разборе объектной модели Word мы не останавливались на
объекте Find.
Давайте узнаем о нем больше.

Не следует досконально зазубривать описанное в этом разделе. Ваша
задача – научиться получать нужную информацию как из справки VBA, так и интуитивно, исходя из строения
кода.

  • Поместите курсор на слове Find (одинарным щелчком мыши).
  • Нажмите [F1].

Откроется справка по этому слову.

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

  • Щелкните по гиперссылке Find (обычно гиперссылки подчеркнуты и выделены синим
    цветом) в тексте справки.

И вот перед нами справка, относящаяся к интересующему нас объектуFind.

Как видите, краткое описание вводит нас в курс дела.

Объект Find представляет
критерии операции поиска (и замены).

Атрибуты этого объекта соответствуют элементам диалогового
окна Найти и заменить.
Иначе говоря, этого объект будет использоваться при настройке параметров поиска/замены
и при проведении поиска/замены.

Давайте узнаем, что делает метод ClearFormatting.

  • Щелкните по гиперссылке Methods вверху страницы справки.
  • В появившемся диалоговом окне выберите строку с
    именем метода ClearFormatting и щелкните
    кнопку Показать (или нажмите [Enter]).
  • Прочитайте справку.

Метод ClearFormatting «сбрасывает»
использовавшиеся раньше параметры поиска/замены.

Это следует делать для контроля над выполняемыми действиями.
Действительно, макрос «не знает» и не может знать, что вы делали раньше, и,
чтобы не было ошибок, следует приводить все к «стандартным» условиям, что и
делается автоматически при записи макроса средствами VBA.

Итак, мы разобрались в смысле первой строки кода. Здесь
происходит приведение условий поиска/замены к стандартным.

Перейдем к следующей строке кода.

Selection.Find.Style = ActiveDocument.Styles(«примечание»)

Конструкция Selection.Find должна быть вам понятна.

В этой строке присутствует знак равенства =. Как мы
видели выше, это дает понять, что выражение Selection.Find.Style является свойством.

А вот выражение ActiveDocument.Styles(«примечание») разберем подробнее.

Термин ActiveDocument мы встречали раньше при разборе объектной
модели Word. Как
помните, этот объект обозначает документ, активный в данный момент.

Этот объект содержит свойство (вспомните знак равенства) Styles.
А в выражении слева от знака равенства есть слово Style. Итак, слева от
знака равенства – Стиль в единственном числе, а справа – Стили, – во
множественном.

При разборе объектной модели мы уже встречали подобные выражения.

Наборы объектов, как правило,
носят имя объекта во множественном числе.

Итак, в этой строке кода свойству Style объекта Find  (объекта Selection) присваивается значение
из набора стилей активного документа.

Как же производится поиск в наборе стилей? Здесь это
очевидно. В скобках помещена строка с именем стиля. Вспомните, именно это имя
мы присвоили стилю при его создании.

Опишем один из способов доступа к элементу набора.

<набор>(<имя_элемента>)

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

Теперь подытожим значение этой строки кода.

Свойству Стиль (Style)
объекта поиска/замены (Find) присваивается стиль примечание,
содержащийся в наборе стилей активного документа.

В чем смысл данной строки?

Как помните, по условиям мы ищем участки текста, имеющие стиль примечание.
В этой строке мы как раз и настраиваем будущий поиск, задавая стиль как
условие.

Третья строка кода несет служебный характер.

With Selection.Find

Первым идет слово WithС (чем-то). Это – служебное слово языка VBA, предназначенное для сокращения
кода. Данная строка сообщает языку, что далее работа будет идти с конструкцией Selection.Find
вплоть до появления строки End With. Немного ниже эта строка
присутствует.

Но и первые две строки кода работают с конструкцией Selection.Find!
Отчего же они не включены в конструкцию With? Это – «своеобразное»
поведение средства автоматизации VBA. Далее мы приведем код к однообразному виду.

Четвертая строка кода:

.Text = «»

Если мысленно подставить перед точкой выражение из строки With,
то получим полный вид:

Selection.Find.Text = «»

Конструкция With значительно сокращает код. Кроме того, происходит
ускорение работы.

Дело в том, что VBA
при каждом выполнении кода прочитывает и выполняет все слова по порядку. А
здесь он «уже знает», с чем идет работа и экономит два слова. Кажется, немного.
Но представьте, что эта строка выполнится хотя бы тысячу раз. Экономия в две
тысячи слов уже заметна.

  • Итак, разберите строку самостоятельно.

Здесь продолжается задание условий поиска.
А именно – мы будем искать строку с текстом (Text) “”.

Две кавычки, стоящие рядом,
обозначают так называемую «пустую строку». Иначе говоря, если отсутствие
числового значения обозначается как «0» – ноль, то отсутствие текстового
значения выражается «пустой строкой».

Смысл этой строки в том, что не будет производиться поиск какого-то
определенного текста. Так следует делать при поиске по форматированию текста,
как в нашем случае – поиск по стилю, или – по шрифту, размеру и толщине букв и
тому подобное.

Следующая строка:

.Replacement.Text = «»

Объект Replacement, как вы
можете прочитать в справке, определяет условия замены.

Здесь определяется текст, который будет заменять найденный. Так как
это не требуется, свойству Text присваивается пустая строка.

Далее – строка

.Forward = True

Как видите, свойству Forward (Вперед) присваивается значение True (Правда, Истина).

Значение True соответствует особому типу VBA – логическому типу.

Свойства этого типа могут
принимать только два значения – True и False (Истина и Ложь).

Эту строку кода можно прочитать так: «Истинен поиск вперед». Или
так – поиск производится вперед, в направлении от начала документа к концу.

Затем идет строка

.Wrap = wdFindContinue

Свойство Wrap (Поворачивать, Заворачивать) определяет поведение поиска при достижении
конца документа.

Этому свойству присваивается необычное значение – wdFindContinue (ПоискПродолжать).

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

  • Прочитайте справку по свойству Wrap.

Вы увидите описание значений этого свойства.

В данном случае при достижении конца документа поиск будет
продолжаться с начала (пока не будет достигнуто положение начала поиска).
Другие значения – wdFindAsk (ИскатьСпрашивать),
заставляющее объект поиска задавать вопрос пользователю о продолжении поиска с
начала документа и wdFindStop (ПоискОстановить),
которое остановит поиск по достижении конца документа. Как указано в справке,
вышесказанное верно при предварительном задании Forward = True,
что мы видели в предыдущей строке кода.

Следующая строка

.Format = True

подтверждает поиск формата текста (стиль есть разновидность
формата).

Последующие строки избыточны, в нашем конкретном случае не нужны.

.MatchCase =
False

Свойство MatchCase заставляет
искать слово, соблюдая его регистр (то есть положение заглавных и строчных букв).
Здесь это условие отключено (свойство равно False). Но ведь раньше мы
определились, что вообще не ищем текст! Эта строка бессмысленна. В дальнейшем
мы исправим код.

.MatchWholeWord
= False

Эта строка отключает поиск целого
слова (в отличие от поиска части слова). В нашем макросе это действие не нужно.

.MatchWildcards = False

Отключается поиск согласно
знакам подстановки. Строка бессмысленна.

.MatchSoundsLike
= False
.MatchAllWordForms = False

Эти строки отключают поиск
слов, схожих по звучанию с заданным, и поиск всех словоформ. Во-первых, нам это
не нужно, во-вторых, Word
русской версии эти операции вообще не производит (или производит не вполне
корректно).

На этом завершается блок With.

Строка

Selection.Find.Execute

обращается к методу ExecuteВыполнить.

Здесь производится собственно
поиск согласно сделанным настройкам. Обратите внимание, что и эта строка могла
бы быть включена в блок With.

Найденный в результате поиска блок будет выделен. То есть – объект Selection изменится.

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

Строка

Selection.Cut

вызывает метод CutВырезать.

Этот метод действует
аналогично команде меню Word ПравкаВырезать.

При выполнении метода Cut выделенный ранее участок переносится в буфер обмена Windows и удаляется из текста.

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

Selection.MoveLeft Unit:=wdCharacter, Count:=1

  • Вызвав справку по слову MoveLeft (один раз щелкнуть на слове в окне кода и нажать [F1]), мы увидим, что MoveLeft (ДвигатьсяВлево) – метод.

Давайте воспользуемся возможностями IDE VBA для получения
дополнительных сведений.

  • Поместите курсор в окне кода сразу за словом MoveLeft и введите символ “ (“ (открывающая скобка).

Появится подсказка:

Как видите, в появившейся «полосочке» – название метода,
открывающая скобка (такая, как мы только что ввели), а затем – какие-то слова.

По ближайшему рассмотрению мы замечаем слово Unit – жирным, в
квадратных скобках. А в тексте – также слово Unit. Далее в подсказке слово Count,
в тексте оно также есть. А вот третьего слова из подсказки – Extend – в тексте нет.

Очевидно, что жирным шрифтом в подсказке выделено слово, введение
которого ожидается IDE
в данном месте.

Но для чего скобки и дополнительные слова в вызове метода –
сейчас разберем.

Лишь самые простые методы вызываются как есть. Как правило, при
вызове метода должно быть некоторое уточнение.

Вспомните реальную жизнь. Если вам прикажут, предположим, «Читай!»,
то вы начнете размышлять, что требуется читать. Либо перед вами лежит открытая
книга, и приказ относится к ней – подобная ситуация настроек по умолчанию была
раньше с объектом Selection.Find. Либо необходимо требуется
уточнение – что читать.

Подобное уточнение при вызове
метода называется параметром метода.

Значение параметра – аргумент.

В этой строке у метода MoveLeft есть параметр Count,
но аргумент 1.

Вернемся к примеру с чтением. У действия «читать» возможны
дополнительные указания – например, «вслух-про_себя» «громко-тихо»,
«быстро-медленно» и др. Но эти условия часто могут быть пропущены без ущерба
для выполняемого действия.

Таким образом, у методов
бывают необязательные параметры, при вызове методов их можно опускать.

Синтаксис вызова метода с параметрами таков:

<метод>
<аргумент1>, <аргумент2>…

То есть аргументы следуют за методом по
порядку, разделенные запятыми.

Если же метод предоставляет значение для присвоения
свойству, то синтаксис немного изменится:

<свойство> = <метод> (<аргумент1>,
<аргумент2>…)

Добавлены скобки, охватывающие список параметров. Подобное
изменение синтаксиса относится и ко всем случаям, рассмотренным ниже.

Если у метода есть необязательные параметры –
именно их необязательность обозначена квадратными скобками на подсказке IDE VBA (смотри на картинке
выше), то необязательные параметры могут быть пропущены. Здесь возможны два
синтаксиса (Не забудьте, это относится только к необязательным параметрам!).

Во-первых, аргументы можно по-прежнему размещать в своем порядке,
оставляя «свободное место» пропущенным. Например, у метода есть три параметра,
при вызове мы пропускаем второй:

<метод> <аргумент1>,, <аргумент3>

Как видите, запятая есть, а аргумента – нет.

Если пропущен первый аргумент, будет так:

<метод> ,<аргумент2>, <аргумент3>

Но если пропущен последний аргумент, этого не требуется,
делаем вид, что так и надо:

<метод> <аргумент1>

Здесь пропущены второй и третий аргументы.

<метод> <аргумент1>, <аргумент2>

А здесь – третий.

Во-вторых, можно явно указывать имя параметра и аргумент. В этом
случае их даже можно менять местами – если вам это удобно. Синтаксис будет
такой:

<метод> <параметр1>:=<аргумент1>, <параметрM>:=<аргументM>, <параметрN>:=<аргументN>…

В этом случае не надо «резервировать» запятые для
пропущенных аргументов, запись более наглядна.

Но – написание кода займет гораздо больше времени, его объем
увеличится, а, по некоторым непроверенным данным – уменьшится скорость
выполнения программы. Так что способ записи выбирайте сами!

Вернемся к нашему коду.

  • Удалите введенную только что скобку после слова MoveLeft.

Итак, исходя из справки – и из подсказки в коде, – метод MoveLeft (ДвигатьсяВлево)
перемещает выделение в тексте влево и 
имеет три параметра:

  • Unit (Единица) – показывает,
    что считается единицей перемещения. Если значение не передается, метод перемещает
    выделение «символами».
  • Count (Счет) –
    на сколько unit-ов
    перемещаемся. Если аргумент пропущен – на 1.
  • Extend (Расширять)
    – определяет, «раздвигаем» ли мы выделение влево или же перемещаем. Если
    аргумента нет – перемещаем.

Все три параметра – необязательны, что мы видели еще на
подсказке IDE VBA,
где все три параметра были заключены в квадратные скобки.

Итак, в этой строке кода макроса происходит перемещение
выделения (читай – текстового курсора) влево на один (Count:=1) символ
(Unit:=wdCharacter),
что соответствует перемещению текстового курсора клавишей [] при записи макроса.

Набор Footnotes, метод Add

Перейдем к следующей строке:

ActiveDocument.Footnotes.Add Range :=Selection.Range,
Reference:=»»

Здесь мы работаем уже с другим объектом – ActiveDocument. Как
помните, это – обозначение документа, активного в данный момент (помните, в
начале работы вам советовали закрыть все посторонние документы Word? Именно для того, чтобы
не было проблем с подобными участками кода).

Вспоминаем интуитивный разбор, проводившийся нами ранее.

У объекта ActiveDocument есть как свойство набор Footnotes (набор – потому что во множественном числе), а
у этого набора – метод Add (синтаксис очень схож с предыдущей строкой кода, здесь
используются необязательные параметры).

Объект Footnote, содержащийся в этом
наборе, представляет собою сноску внизу страницы (в отличие от Endnote – сноски в
конце текста).

Документ имеет набор сносок.

Метод Add (Добавить)
характерен для наборов VBA.
Его действие, как следует из названия – добавление нового элемента в набор.

  • Введите открывающую скобку после слова Add и ознакомьтесь со списком параметров метода:

Как видите, первый параметр Range обязателен – он не помещен
в квадратные скобки, два других – необязательны.

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

  • Поместите текстовый курсор (одиночным щелчком) на
    слове Add и нажмите [F1].

На странице справки вы видите большой список объектов, к
которым применим метод Add.

  • Найдите строку со словом Footnotes:

  • Щелкните на гиперссылке Footnotes для
    перехода на интересующую нас страницу. Читаем справку.

Как видите, параметр Range указывает место расположения будущей сноски.

В нашем коде аргументом является Selection.Range,
иными словами – текущее положение текстового курсора.

Заметьте, что, согласно справке, аргументом должен выступать пустой
регион – в результате действия предыдущей строки кода объект Selection.Range как раз и стал «пустым», соответствующим текстовому курсору.

Под «пустым» подразумевается
регион, не имеющий содержимого. Текстовый курсор можно рассматривать как
регион, у которого совпадают начало и конец – а, значит, содержимого у него
нет.

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

Если аргумент опущен – или, как в данном случае, равен пустой
строке, то сноски будут нумероваться.

В следующем параметре Text вы можете сразу задать текст сноски.

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

Если вы заметили, наборы VBA имеют довольно серьезный недостаток. А именно, элемент набора Footnotes не имеет идентификатора. Нет простого способа обратиться, предположим, к сноске
с определенным текстом, даже если мы его задали при создании сноски, вам
придется «пролистывать» весь набор в поисках требуемого. Кроме того, при
добавлении элемента набора ему присваивается некоторый индекс – порядковый
номер. Но вы не знаете, какой индекс будет у данной конкретной сноски, а после
удаления или добавления сноски в тексте индексация может измениться.

Подобными недостатками страдают все наборы VBA. Вам придется принимать это как
данность, простого способа справиться с ситуацией, к сожалению, нет.

В следующей строке

Selection.Paste

происходит вставка содержимого
буфера обмена в место нахождения текстового курсора – при создании сноски в
предыдущей строке кода текстовый курсор самостоятельно переходит в нужное
место.

Эта строка аналогична выполнению команды
меню Word ПравкаВставить.

Следующая строка

ActiveWindow.Panes(1).Activate

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

Если вы забыли это сделать – не огорчайтесь, в конце концов, вы
можете записать макрос заново.

В этой строке мы встречаем объект ActiveWindowАктивноеОкно. По
аналогии с ActiveDocument можно догадаться, что это – обозначение текущего окна Word.

Этот объект, оказывается, может иметь набор PanesПанели. Здесь идет
работа с панелью номер 1.

В коде происходит вызов метода ActivateАктивировать.

Если помните, при записи макроса после размещения текста в сноске
мы производили одиночный щелчок мышью в основном тексте для перемещения
курсора. Именно это действие имитируется данной строкой кода. Если это не будет
сделано, дальнейшая работа будет происходить с текстом сноски, а не основным
текстом.

Если бы документ при записи макроса находился в режиме разметки,
как часто бывает (выполните команду меню Word ВидРазметка страницы чтобы понять, что имеется в виду),
панель сносок не была бы открыта, и щелчок мыши не перенес бы курсор в текст.
Продолжение работы макроса было бы невозможно.

Итак, мы вместе разобрали результат автоматической записи
макроса. Как видите, простота и наглядность этого способа сочетаются с
определенными ограничениями при записи – приходится соблюдать дополнительные
условия, и код иногда получается избыточен, как в нашем случае при настройке
параметров поиска. Кроме того, автоматическая запись не дает возможности
«зациклить» выполнение для прохождения всего документа.

Поэтому настоятельно рекомендуется корректировка макроса
вручную, чем мы и займемся в течение следующего занятия.

Итог занятия

Как видите, это занятие было в основном теоретическим, как
такового исправления макроса мы не делали. Тем не менее, вы получили много
полезной информации.

Материал занятия следует законспектировать. Лучше всего, если вы
сделаете это, не заглядывая в книгу, для чего мы приведем краткий план будущего
конспекта.

  • Программа,
    понятие, виды программ.
  • Языки
    программирования, понятие, разновидности.
  • Язык
    Basic, его
    отличительные особенности. Диалекты Basic – VB,
    VBA.
  • Составляющие
    изучения языка, их характеристики.
  • Понятие
    IDE.
  • Процедура
    (подпрограмма), понятие, синтаксис.
  • Объект,
    понятие.
  • Имя
    объекта. Правила именования в языке VBA.
  • Атрибуты
    объекта, их разновидности.
  • Синтаксис
    свойств и методов.
  • Понятие
    объектной модели.
  • Наборы,
    понятие, синтаксис доступа.
  • Параметры,
    аргументы, синтаксис. Необязательные параметры, синтаксис.
  • Конструкция With, ее смысл, синтаксис.

Довольно. Остальное вы можете узнать из справки VBA.

Не нужно зазубривать! Материал следует передавать своими словами.

Лучший способ проверить усвоение материала – попробовать
объяснить его кому-нибудь другому. При возможности сделайте это.

Аннотация: Лекция посвящена описанию объектной модели 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.).

Свойство Name объекта Application

Рис.
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.

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

title description ms.date ms.topic dev_langs helpviewer_keywords author ms.author manager ms.technology ms.workload

Word object model overview

The Word object model consists of classes and interfaces that are provided in the primary interop assembly for Word and are defined in the Word namespace.

02/02/2017

conceptual

VB

CSharp

Word object model

Word [Office development in Visual Studio], object model

object models [Office development in Visual Studio], Office

object models [Office development in Visual Studio], Word

objects [Office development in Visual Studio], Office object models

Office object models

John-Hart

johnhart

jmartens

office-development

office

Word object model overview

[!INCLUDE Visual Studio]
When you develop Word solutions in Visual Studio, you interact with the Word object model. This object model consists of classes and interfaces that are provided in the primary interop assembly for Word, and are defined in the xref:Microsoft.Office.Interop.Word namespace.

[!INCLUDEappliesto_wdalldocapp]

This topic provides a brief overview of the Word object model. For resources where you can learn more about the entire Word object model, see Use the Word object model documentation.

For information about using the Word object model to perform specific tasks, see the following topics:

  • Work with documents

  • Work with text in documents

  • Work with tables

Understand the Word object model

Word provides hundreds of objects with which you can interact. These objects are organized in a hierarchy that closely follows the user interface. At the top of the hierarchy is the xref:Microsoft.Office.Interop.Word.Application object. This object represents the current instance of Word. The xref:Microsoft.Office.Interop.Word.Application object contains the xref:Microsoft.Office.Interop.Word.Document, xref:Microsoft.Office.Interop.Word.Selection, xref:Microsoft.Office.Interop.Word.Bookmark, and xref:Microsoft.Office.Interop.Word.Range objects. Each of these objects has many methods and properties that you can access to manipulate and interact with the object.

The following illustration shows one view of these objects in the hierarchy of the Word object model.

Word Object Model graphic

At first glance, objects appear to overlap. For example, the xref:Microsoft.Office.Interop.Word.Document and xref:Microsoft.Office.Interop.Word.Selection objects are both members of the xref:Microsoft.Office.Interop.Word.Application object, but the xref:Microsoft.Office.Interop.Word.Document object is also a member of the xref:Microsoft.Office.Interop.Word.Selection object. Both the xref:Microsoft.Office.Interop.Word.Document and xref:Microsoft.Office.Interop.Word.Selection objects contain xref:Microsoft.Office.Interop.Word.Bookmark and xref:Microsoft.Office.Interop.Word.Range objects. The overlap exists because there are multiple ways you can access the same type of object. For example, you apply formatting to a xref:Microsoft.Office.Interop.Word.Range object; but you may want to access the range of the current selection, of a particular paragraph, of a section, or of the entire document.

The following sections briefly describe the top-level objects and how they interact with each other. These objects include the following five:

  • Application object

  • Document object

  • Selection object

  • Range object

  • Bookmark object

    In addition to the Word object model, Office projects in Visual Studio provide host items and host controls that extend some objects in the Word object model. Host items and host controls behave like the Word objects they extend, but they also have additional functionality such as data-binding capabilities and extra events. For more information, see Automate Word by using extended objects and Host items and host controls overview.

Application object

The xref:Microsoft.Office.Interop.Word.Application object represents the Word application, and is the parent of all of the other objects. Its members usually apply to Word as a whole. You can use its properties and methods to control the Word environment.

In VSTO Add-in projects, you can access the xref:Microsoft.Office.Interop.Word.Application object by using the Application field of the ThisAddIn class. For more information, see Program VSTO Add-ins.

In document-level projects, you can access the xref:Microsoft.Office.Interop.Word.Application object by using the xref:Microsoft.Office.Tools.Word.Document.Application%2A property of the ThisDocument class.

Document object

The xref:Microsoft.Office.Interop.Word.Document object is central to programming Word. It represents a document and all of its contents. When you open a document or create a new document, you create a new xref:Microsoft.Office.Interop.Word.Document object, which is added to the xref:Microsoft.Office.Interop.Word.Documents collection of the xref:Microsoft.Office.Interop.Word.Application object. The document that has the focus is called the active document. It is represented by the xref:Microsoft.Office.Interop.Word._Application.ActiveDocument%2A property of the xref:Microsoft.Office.Interop.Word.Application object.

The Office development tools in Visual Studio extend the xref:Microsoft.Office.Interop.Word.Document object by providing the xref:Microsoft.Office.Tools.Word.Document type. This type is a host item that gives you access to all features of a xref:Microsoft.Office.Interop.Word.Document object, and adds additional events and the ability to add managed controls.

When you create a document-level project, you can access xref:Microsoft.Office.Tools.Word.Document members by using the generated ThisDocument class in your project. You can access members of the xref:Microsoft.Office.Tools.Word.Document host item by using the Me or this keywords from code in the ThisDocument class, or by using Globals.ThisDocument from code outside the ThisDocument class. For more information, see Program document-level customizations. For example, to select the first paragraph in the document, use the following code.

C#

:::code language=»csharp» source=»../vsto/codesnippet/CSharp/Trin_VstcoreWordAutomationCS/ThisDocument.cs» id=»Snippet120″:::

VB

:::code language=»vb» source=»../vsto/codesnippet/VisualBasic/Trin_VstcoreWordAutomationVB/ThisDocument.vb» id=»Snippet120″:::

In VSTO Add-in projects, you can generate xref:Microsoft.Office.Tools.Word.Document host items at run time. You can use the generated host item to add controls to the associated document. For more information, see Extend Word documents and Excel workbooks in VSTO Add-ins at run time.

Selection object

The xref:Microsoft.Office.Interop.Word.Selection object represents the area that is currently selected. When you perform an operation in the Word user interface, such as bolding text, you select, or highlight the text and then apply the formatting. The xref:Microsoft.Office.Interop.Word.Selection object is always present in a document. If nothing is selected, then it represents the insertion point. In addition, a selection can encompass multiple blocks of text that are not contiguous.

Range object

The xref:Microsoft.Office.Interop.Word.Range object represents a contiguous area in a document, and is defined by a starting character position and an ending character position. You are not limited to a single xref:Microsoft.Office.Interop.Word.Range object. You can define multiple xref:Microsoft.Office.Interop.Word.Range objects in the same document. A xref:Microsoft.Office.Interop.Word.Range object has the following characteristics:

  • It can consist of the insertion point alone, a range of text, or the entire document.

  • It includes non-printing characters such as spaces, tab characters, and paragraph marks.

  • It can be the area represented by the current selection, or it can represent an area different from the current selection.

  • It is not visible in a document, unlike a selection, which is always visible.

  • It is not saved with a document and exists only while the code is running.

    When you insert text at the end of a range, Word automatically expands the range to include the inserted text.

Content control objects

A xref:Microsoft.Office.Interop.Word.ContentControl provides a way for you to control the input and presentation of text and other types of content in Word documents. A xref:Microsoft.Office.Interop.Word.ContentControl can display several different types of UI that are optimized for use in Word documents, such as a rich text control, a date picker, or a combo box. You can also use a xref:Microsoft.Office.Interop.Word.ContentControl to prevent users from editing sections of the document or template.

Visual Studio extends the xref:Microsoft.Office.Interop.Word.ContentControl object into several different host controls. Whereas the xref:Microsoft.Office.Interop.Word.ContentControl object can display any of the different types of UI that are available for content controls, Visual Studio provides a different type for each content control. For example, you can use a xref:Microsoft.Office.Tools.Word.RichTextContentControl to create a rich text control, or you can use a xref:Microsoft.Office.Tools.Word.DatePickerContentControl to create a date picker. These host controls behave like the native xref:Microsoft.Office.Interop.Word.ContentControl, but they have additional events and data-binding capabilities. For more information, see Content controls.

Bookmark object

The xref:Microsoft.Office.Interop.Word.Bookmark object represents a contiguous area in a document, with both a starting position and an ending position. You can use bookmarks to mark a location in a document, or as a container for text in a document. A xref:Microsoft.Office.Interop.Word.Bookmark object can consist of the insertion point, or be as large as the entire document. A xref:Microsoft.Office.Interop.Word.Bookmark has the following characteristics that set it apart from the xref:Microsoft.Office.Interop.Word.Range object:

  • You can name the bookmark at design time.

  • xref:Microsoft.Office.Interop.Word.Bookmark objects are saved with the document, and thus are not deleted when the code stops running or your document is closed.

  • Bookmarks can be hidden or made visible by setting the xref:Microsoft.Office.Interop.Word.View.ShowBookmarks%2A property of the xref:Microsoft.Office.Interop.Word.View object to false or true.

    Visual Studio extends the xref:Microsoft.Office.Interop.Word.Bookmark object by providing the xref:Microsoft.Office.Tools.Word.Bookmark host control. The xref:Microsoft.Office.Tools.Word.Bookmark host control behaves like a native xref:Microsoft.Office.Interop.Word.Bookmark, but has additional events and data-binding capabilities. You can bind data to a bookmark control on a document in the same way that you bind data to a text box control on a Windows Form. For more information, see Bookmark control.

Use the Word object model documentation

For complete information about the Word object model, you can refer to the Word primary interop assembly (PIA) reference and the Visual Basic for Applications (VBA) object model reference.

Primary interop assembly reference

The Word PIA reference documentation describes the types in the primary interop assembly for Word. This documentation is available from the following location: Word 2010 primary interop assembly reference.

For more information about the design of the Word PIA, such as the differences between classes and interfaces in the PIA and how events in the PIA are implemented, see Overview of classes and interfaces in the Office primary interop assemblies.

VBA object model reference

The VBA object model reference documents the Word object model as it is exposed to VBA code. For more information, see Word 2010 object model reference.

All of the objects and members in the VBA object model reference correspond to types and members in the Word PIA. For example, the Document object in the VBA object model reference corresponds to the xref:Microsoft.Office.Interop.Word.Document object in the Word PIA. Although the VBA object model reference provides code examples for most properties, methods, and events, you must translate the VBA code in this reference to Visual Basic or Visual C# if you want to use them in a Word project that you create by using Visual Studio.

See also

  • Office primary interop assemblies
  • Automate Word by using extended objects
  • Work with documents
  • Work with text in documents
  • Work with tables
  • Host items and host controls overview
  • Programmatic limitations of host items and host controls
  • Optional parameters in Office solutions

2.1.1 Модель документа Microsoft Word

Огромное количество электронных версий учебно-методических мате­риалов в образовательных учреждениях России представлено в формате Mi­crosoft Word. Это объясняется широкой популярностью приложений Micro­soft Office среди пользователей и простотой освоения и использования дан­ного программного продукта. Поэтому весьма актуальной является задача автоматизации процесса конвертирования образовательного контента из представления Microsoft Word в формат Moodle.

Документ Microsoft Word представляет собой специализированное СОМ-ориентированное хранилище данных — структурированное хранилище (Structured Storage), организованное по иерархическому принципу. Документ может содержать различные типы данных: структурированный текст, графи­ку, математические выражения, организационные диаграммы и т.д.

Концепция структурированного хранилища является составной частью современной парадигмы программирования на основе модели компонентных объектов (Component Object ModelCOM). По сути, структурированное хра­нилище — это технология объединения в одной логической единице хранения данных (файле) объектов с различной природой и свойствами. Технология СОМ предлагает стандартную реализацию концепции структурированного хранилища в виде составного файла (Compound File): файловая система внутри файла. СОМ-хранилище представляет собой иерархическую структу­ру коллекций объектов двух типов: хранилищ (Storage) и потоков (Stream), которым в традиционной файловой системе соответствуют каталоги и файлы. Данный подход позволяет существенно снизить издержки хранения в од­ном файле объектов различной природы.

Объект-хранилище, аналогично каталогу файловой системы, может со­держать потоки и другие хранилища. Фактически это означает, что хранили­ще содержит записи с информацией о местоположении, размере и других свойствах размещенных в нем объектов-потоков и других хранилищ. Объект-поток является последовательностью байтов, интерпретация которых, как и для обычного файла, зависит от типа потока (файла). Составной файл обяза­тельно должен содержать корневое хранилище (Root Storage), которое, в свою очередь содержит как минимум один объект-поток, представляющий данные о самом хранилище (Native Stream), рис. 5. Кроме этого, корневое хранилище содержит имя составного файла в нотации файловой системы, к которой он принадлежит.

  

Каждый объект документа в составном файле представлен отдельным хранилищем, которое может содержать:

  • один или несколько объектов-потоков, соответствующих экземпля­рам данного объекта;
  • другие объекты-хранилища, представляющие встроенные в негообъекты (Inline Storage), и т.д.

Таким образом, глубина вложенности объектов в хранилище теорети­чески не ограничена, документ может быть сколь угодно сложным.

В общем случае технология СОМ предоставляет набор средств уровня API для работы с произвольными структурированными хранилищами. Так, объекты-хранилища и объекты-потоки поддерживают стандартный набор ин­терфейсов:

  • IRootStorage — связывает хранилище с содержащим его файлом;
  • IStorage — содержит методы для создания, открытия, модификации,перемещения, копирования, переименования, удаления объектовхранилища;
  • IStream — поддерживает операции с потоком, аналогичные файло­вым операциям в файловой системе: чтение, запись, управлениеуказателем и т.д.;
  • ILockBytes — реализует байтовый буфер для работы с носителямиданных;
  • IPersist — идентификация объектов на уровне операционной систе­мы;
  • IPersistStorage — поддержка иерархической структуры хранилища;
  • IPersistStream — реализует сериализацию объектов хранилища;
  • IPersistFile — доступ к объектам, содержащимся в других файлах.Кроме этого, имеется Structured Storage API, содержащий следующие

основные группы функций:

  • функции-ярлыки, выполняющие пакетные вызова других API-функций и интерфейсных методов для решения стандартных задач;
  • функции доступа к реализации структурированного хранилища исоставному файлу;
  • функции конвертирования и эмуляции объектов, которые дают воз­можность OLE-серверу работать с объектами, созданными другимсервером;
  • функции конвертирования объектов формата OLE 1 в структуриро­ванное хранилище.

Конкретные реализации СОМ-приложений, использующие структури­рованные хранилища, как правило, имеют собственные библиотеки объек­тов-оберток API-интерфейса. Так, Microsoft Word предоставляет в распоря­жение прикладных программ сотни объектов. Отношения наследования и аг­регации объединяют эти объекты в иерархическую структуру — объектную модель Microsoft Word.

На рис. 6 представлен концептуальный уровень объектной модели Microsoft Word, который включает в себя шесть базовых объектов: 

Рис. 6. Объектная модель Microsoft Word

  • Application;
  • Document;
  • Selection;
  • Rang e;
  • Bookmark.

К особенностям модели в первую очередь относится наличие множест­венных перекрытий. Так, Document и Selection являются компонентами объ­екта Application, однако Document так же является свойством объекта Selec­tion. Среди свойств Document и Selection имеются объекты Bookmark и Range. Перекрытия обеспечивают множественный доступ к объектам модели. На­пример, операция форматирования применима к объекту Range, который может быть определен как текущее выделение (Selection), абзац, раздел либо документ целиком.

Объект Application представляет приложение Microsoft Word и содер­жит все остальные объекты модели. Свойства и методы Application дают воз­можность полностью контролировать среду приложения Word.

Базовым компонентом, обеспечивающим доступ и манипулирование документами, является объект Document. В пространстве имен сборки Office Primary Interop для операционной среды .NET этот объект имеет вид:

Microsoft.Office.Interop.Word.Document

Объект Document содержит непосредственно данные документа (текст, графику и т.д.), сведения о структуре и форматировании документа. Струк­турные компоненты документа (абзацы, разделы, страницы, колонтитулы, стили и т.д.) представлены коллекциями экземпляров соответствующих свойств объекта. При создании нового или загрузке существующего доку­мента Word создает новый экземпляр объекта Document и помещает его в коллекцию Documents объекта Application. Коллекция поддерживает указатель активного документа, который всегда представлен значением свойства ActiveDocument объекта Application.

Объект Selection представляет текущую выделенную область документа. Все операции форматирования документа применяются к текущему экземпля­ру объекта Selection. Экземпляр Selection существует всегда: если в документе отсутствует выделение, то он представляет текущую позицию ввода.

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

  • Range может представлять текущую позицию ввода, непрерывнуюобласть текста или документ целиком;
  • Range включает управляющие символы — отступы, табуляции, раз­рывы срок, границы абзацев и т.д.;
  • Range может представлять текущее выделение или другой участокдокумента;
  • участок документа, представляемый объектом Range не выделяетсявизуально;
  • если новый текст вводится в конец диапазона, представленного объ­ектом Range, то он включается в состав объекта;
  • объекты Range не сохраняются вместе с документом.Возможно определение нескольких экземпляров объекта Range в одном и том же документе.

Объект Bookmark, аналогично Range, представляет непрерывную об­ласть документа и может использоваться как контейнер для текста. В отли­чии от Range, объекты Bookmark:

  • именуются;
  • сохраняются вместе с документом;
  • могут быть видимыми — свойство ShowBookmarks = True объектаView.

В общем случае документ Microsoft Word является сложной композит­ной структурой, содержащей различные типы данных. Для извлечения дан­ных из конкретного документа необходимо произвести его синтаксический анализ — парсинг (Parsing): определить типы хранящихся данных (текст, гра­фика, таблицы, OLE-объекты) и выявить структуру документа.

Решение задач парсинга и извлечения контента из документа Microsoft Word связано, в основном, с использованием свойств и методов объекта Document. Имеет смысл построить модель документа, ориентированную на решение данного типа задач: среди порядка сотни свойств и методов объекта Document выявим необходимые для достижения поставленной цели и опре­делим порядок их использования.

Основными типами данных документа Microsoft Word являются: текст, графика и таблицы. Таким образом, задача структурного анализа документа разделяется на три подзадачи:

Range является свойством объекта Paragraph. Текстовое содержание абзаца доступно через свойство Range.Text объекта Range. Общая модель парсинга текста документа Microsoft Word представлена на рис. 7.

Объект Range представляет собой базовый компонент модели струк­турного анализа документа (рис. 8).

Range предоставляет доступ ко всем основным типам данных докумен­та. Среди его свойств — коллекции абзацев (Paragraphs), графических изо­бражений (InlineShapes, ShapeRange), таблиц (Tables), рамок (Frames).

Объекты-таблицы (Table) содержатся в коллекции Tables и имеют структуру, представленную на рис. 9. Данные таблицы располагаются в ячей­ках — объектах Cell, объединенных в коллекции Cells. Имеется несколько ва­риантов получения доступа к экземплярам коллекций:

  • коллекция ячеек таблицы является свойством её объекта Range;
  • коллекция ячеек строки — свойство объекта Row из коллекции Rows;
  • коллекция ячеек столбца — свойство объекта Colum n из коллекции
    Columns;

Можно получить прямой доступ к ячейке с помощью метода объекта-таблицы Table.Cell(Row, Column), который возвращает заданный объект Cell.

На примере таблиц проявляется важное свойство, необходимое для четкого понимания модели документа Microsoft Word — рекурсивный харак­тер структуры документа. Свойство Range объекта-ячейки Cell может, в свою очередь, содержать коллекции таблиц, графики и абзацев (рис. 9). Это дает основания для применения рекурсивных алгоритмов анализа структуры до­кумента.

Графические данные документа Microsoft Word могут содержаться в двух типах объектов: Shape и InlineShape. InlineShape представляет графиче­ский объект в текстовом слое документа (рисунок, OLE-объект, ActiveX-элемент). Shape — это графический объект в слое рисования документа или так называемом полотне (Canvas). Данный объект характеризуется параметрами обтекания текстом и имеет привязку (Anchor) к абзацу или диапазону. Модель парсинга графических объектов документа представлена на рис. 10.

Графические объекты текстового слоя составляют коллекцию Inline-Shapes объекта-диапазона, графические объекты полотна — коллекцию ShapeRange. Кроме этого, графику могут содержать объекты-рамки (Frame) из контейнера Frames.

  

Доступ к графическим объектам рамки осуществляется по той же схеме через его свойство Range. Следует отметить, что содержимое объекта-рамки можно скопировать в буфер обмена Windows.

Понравилась статья? Поделить с друзьями:
  • Сценарий что если в excel примеры
  • Сцепить много ячеек в excel с пробелами
  • Сценарий тестирования приложения в excel
  • Сцепить массив ячейки в excel
  • Сценарий в microsoft excel это