Создание приложений для MsWord. Объекты Range и Selection.
  1. Объекты Range и Selection. Работа с текстом.
  2. Выделенный текст.
  3. Текстовый диапазон.
  4. Выделение текста.
  5. Вырождение диапазона.
  6. Форматирование текста.
  7. Поиск и замена
  8. Коллекция Tables.

1.Объекты Range и Selection.Работа с текстом.

Работа с текстом осуществляется с помощью ряда объектов. Весь текст документа можно представить в виде пирамиды, основой которой являются символы, а вершиной – собственно документ. В иерархическом порядке объектов VBA документ Word можно представить как:

Символы (Characters) ® Слова (Words) ® Предложения (Sentences) ® ®Абзацы (Paragraphs) ®Разделы (Sections) ®Документ (Document)

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

2.Выделенный текст.

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

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

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

Dim e As Paragraphs

Set e = Selection.Paragraphs

MsgBox e.Count

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

Selection.[.Text][=Text]

Для замены текущего выделенного текста используется метод TypeText.

Selection.TypeText(Text)

Пример: вставляем в документ текст «ХХХ» и начинаем новый абзац.

With Selection

.TypeText Text:="XXX"

.TypeParagraph

End With

 

Для управления параметрами вставки текста можно использовать свойство ReplaceSelection.

Selection.ReplaceSelection [=Boolean]

Если true – текущее выделение замещается, если False – то вставлять перед выделением.

3.Текстовый диапазон. Объект Range предназначен для выделения и обработки фрагментов текста. Этот объект является семейством многих объектов.

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

Selection.Paragraphs(1).Range.Select

 Область текста, связанная с объектом типа Range, характеризуется начальными и конечными символами. Для получения информации о них нужно использовать свойства Start и End.

objrange.Start [=Position]

objrange.End [=Position]

параметр Position (типа Long) позволяет задать индекс символа, с которого должен начаться или которым должен закончится фрагмент текста, связанного с данным объектом objRange.

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

ObjDocumet.Range(Start, End)

Параметр Start указывает на индекс символа, с которого должен начаться диапазон, а параметр End – на индекс последнего символа. Индексы символов соответствуют их порядковым номерам в семействе Words, ссылку на которое возвращает свойство Words объекта Document.

4. Выделение текста.

Формально объект Range связан только с диапазоном текста. Этот диапазон может быть никак не связан с текущим положением курсора или выделением. Однако диапазон, связанный с объектом Range, можно выделить в любой момент времени с помощью метода Select.

ObjRange.Select

Пример: выделить второй абзац текущего документа.

ThisDocument.Paragraphs(2).Range.Select

5.Вырождение диапазона.

Для создания вырожденного диапазона можно использовать метод Collapse.

objRange.Collapse [(Direction)]

 Параметр Direction позволяет задать направление, в котором будет выполнено вырождение. Если параметр имеет значение wdCollapseStart, то вырождение выполняется в направлении начала диапазона, т.е. End:=Start. Если параметр имеет значение wdCollapseEnd, то Start:=End

Пример: снятия выделения в документе, курсор помещен в конец выделеного диапазона.

Selection.Collapse wdCollapseEnd

6.Форматирование текста.

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

Свойство Bold – позволяет установить параметры жирного начертания символов.

Если свойство имеет значение True, то начертание жирное , если False– нежирное. Свойство также может возвращать значение wdUnderfined, указывающее на смешанное начертание. Для установления стиля начертания можно использовать следующие значения True, False или wdToggle, позволяющие переключить текущее написание шрифта.

objRange.Bold [=Boolean]

 

Свойство  CombineCharacters

Свойство позволяет сжать все символы выделенного диапазона.  Если свойство имеет значение true, то выполняется сжатие.

Свойство FilTextWidth

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

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

Selection.Range.FilTextWidth=CentimetersToPoints(5)

Свойство objRange.FormattedText

Свойство возвращает ссылку на объект типа Range , который ассоциируется с текстом в пределах данного диапазона objRange, имеющего специфическое форматирование.

 Cвойство Italic – позволяет установить параметры курсивного начертания символов.

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

Свойство ListParagraph

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

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

Свойство Revisions

Свойство возвращает ссылку на объект типа Revisions , который связан с исправлениями , находящимися  в данном диапазоне.

Свойство Showall[=Boolean]

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

Свойство Style[=Style]

Свойство позволяет задать стиль для данного абзаца. Параметр Stile(тип Stile) позволяет указать один из существующих типов.

Свойство Underline[=Underline]

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

Метод InsertAfter вставляет заданный текст в конце диапазона или выделения.

Синтаксис:

objRange.InsertAfter(Text)

Пример:

ActiveDocument.Range.InsertAfter "пример"

 

Метод InsertParagraph позволяет заменить заданный диапазон символов или выделения на новый абзац. После его использования объект Range отождествляется с новым абзацем.

 

Метод InsertSymbol предназначен для вставки символа в заданное место диапазона или выделения. При использовании данного метода содержимое диапазона или выделения удаляется. Если этого не требуется, то перед вызовом этого метода следует использовать метод Collapse.

Синтаксис:

ObjRange.InsertSimbol (CharacterNumber, Font, Unicode)

Параметр CharacterNumber определяет код символа. Параметр Font определяет имя шрифта, используемого в качестве источника символов. Параметр Unicode если значение True, то вставляется юникодовый символ, заданный аргументом CharacterNumbe. В противном случае (по умолчанию False) будет вставлен символ ANSI, заданный аргументом CharacterNumbe.

Пример:

Selection.Collapse direction:=wdCollapseStart

Selection.InsertSymbol characterNumber:=171, Font:="Symbol", unicode:=False           «

 

Метод Paste позволяет вставить содержимое буфера обмена в заданный диапазон или выделение. При его использовании содержимое диапазона или выделения заменяется содержимым буфера обмена. В случае если требуется вставить абзац из буфера обмена без замены текущего абзаца, перед вызовом этого метода следует использовать метод Collapse.

7.Поиск и замена

Поиск   и замена- это стандартные инструменты любого приложенияMicrosoft Office .Как правило, команды вызова соответствующих диалоговых окон располагаются в меню Правка(Edit). Инструменты поиска и замены в VBAреализуются с помощью объектов Find и Replacement.

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

Стандартный инструмент поиска и замены работает следующим образом : вы открываете окно диалога Поиск и замена(Find and Replace) , вводите в соответствующие поля необходимые значения , определяете дополнительные параметры поиска и нажимаете кнопку Поиск(Find) или Заменить(RepleceОднако при частом поиске или замене одних и тех же значений для этой операции удобно назначить кнопку на панели инструментов , комбинацию клавиш или разместить ее в контекстном меню. Для реализации этой задачи нужно сначала создать соответствующий макрос.

Для упрощения (ускорения) создания соответствующего программного кода можно автоматизировать процесс написания макроса.

  1. Подготовить документ к поиску
  2. Выбрать команду Сервис +Макросачать запись
  3. В поле Имя макроса введите имя макроса , в поле Описание добавьте описание макроса
  4. Нажмите кнопку Ok – откроется панель инструментов Остановит запись , содержащая кнопки управления записью макроса: Остановить запись и Пауза.
  5. Выберите команду Правкаайти

Укажите необходимые параметры поиска и нажмите кнопку Найти

На панели инструментов Остановить запись нажмите кнопку Остановить запись

Откройте окно редактирования Visual Basic for Application и перейдите к записанному макросу.

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

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

Пример:

 Sub ReplaceSpace4()

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

With Selection.Find

.Text=space(4)

.Replacement.text=”^t”

.forward=true

.Wrap=WdfindWrap.wdfindall

End With

Selection.Find.Execute Replace:=wdReplaceall

End Sub

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

 

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

 

Переменная strText(тип string) содержит текст, вкотром осуществляется поиск . Если заданный текст будет найден (метод Execute возвращает True), то осуществляется вызов процедуры ReplaceSpace4, показанной в предыдущем примере .

Пример:

 

Selection.Find.ClearFormatting

Selection.Find.Replacement.ClearFormatting

 With Selection.Find

.Text= strText

If .Execute Then ReplaceSpace4

End With

8.Коллекция Tables.

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

Таблица Word имеет такую же структуру, как и электронная таблица Excel – элемент таблицы, находящийся на пересечении строки и столбца, называется ячейкой и идентифицируется по имени столбца и номеру строки.

В VBA для доступа к таблицам используется объект Tables, являющийся семейством объектов Table, каждый из которых связан с конкретной таблицей. Для получения ссылки на семейство Tables можно использовать свойство Tables объекта Document.

Общее число таблиц, имеющихся в документе, содержится в свойстве Count. Для получения доступа к конкретной таблице можно использовать метод Item, который является методом по умолчанию.

Синтаксис:

Set oblTable=objDocument.Tables.Item(Key)

Параметр Key, является уникальным идентификатором каждой таблицы, хранящейся в объекте Tables.

Для создания новой таблицы используется метод Add объекта Tables. Этот метод возвращает ссылку на созданную таблицу(Table).

objTables.Add (Range, NumRows, NumColums)

Параметр Range позволяет указать область документа, куда будет вставлена таблица. Если параметр не пустой, т.е. имеется выделенная область, то она будет заменена вставляемой таблицей.

Параметры NumRows, NumColums позволяют указать на число строк и столбцов таблицы.

Пример: создадим таблицу в выделенном месте или там где стоит курсор.

Set instable = ActiveDocument.Tables.Add(Selection.Range, 4, 10)