Выбрать главу

Range2.Text = "Эй, эй! А ведь дома-то никого нет!"

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

Используйте методы Insert Before или Insert After объектов Range или Selection для вставки текста в определенном месте документа, не затрагивая при этом существующий текст. Эти методы позволяют вставить новый текст непосредственно перед или после указанного объекта соответственно. Word включает вставленный текст в выделенную область или диапазон.

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

Dim strInsert Text As String

Selection.Insert Before "Dairy Entry" & vbCr

strInsert Text = "Today" & Chr(146) & "s date is"

strInsertText = _

strInsertTex't & Format (Now, "Long date") & ". "

Selection.InsertAfter strInsertText & vbCr

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

Простейший способ добавить новый пустой абзац в документ - вставить знак абзаца (представленный константой vbCr) с помощью свойства Text или методов Insert Before или Insert After. Метод Add, применяемый к коллекциям Paragraphs, работает, но не очень удобен в применении.

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

Несколько свойств диапазона или выделенной области - это ваш ключ к изменению внешнего вида текста. Все эти свойства соответствуют командам из меню Формат программы Word и функционируют следующим образом.

Это свойство

Предоставляет доступ к...

Font

Соответствующие свойства каждого аспекта форматирования символов, такие как Name, Size и Bold. По некоторым причинам вы можете получать непосредственный доступ к самым важным свойствам форматирования объектов Range, не обращаясь к свойству Font, но только не при работе с выделенными областями

Paragrap

Соответствующие свойства каждого аспекта форматирования абзацев, такие как hFormat LeftIndent или LineSpacing

Style

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

Borders

Границы вокруг текста

Tabstops

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

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

Хотя это звучит и несколько необычно, но Find - это объект Word VBA. Объекты Find принадлежат диапазонам и выделенным областям. Для обнаружения или форматирования текста с помощью объекта Find вам потребуется выполнить следующие действия.

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

ActiveDocument.Content.Find

2. Определить свойства объекта Find в соответствии с тем, что же вы ищете и как именно вы хотите проводить поиск.

3. Вызвать метод Execute объекта Find. Соответствующий пример приведен ниже:

With OpenRange.Find

.Clear Formatting

.Text = "pogosticks"

.Execute

End With

Для свойств, значения которых явно вы задать не можете, объект Find выбирает параметры, использованные последними или те, которые в настоящий момент заданы в диалоговом окне Найти и заменить программы Word. Именно по этой причине вам всегда следует включать метод Clear Formatting перед началом нового поиска- он позволяет убрать все ранее определенные для проведения поиска параметры форматирования.

Работа с найденным текстом

Основная работа метода Execute - обнаружение первого экземпляра искомого текста или форматирования в указанном диапазоне или выделенной области. После выполнения этого метода вам прежде всего следует определить, было ли найдено то, что вы ищете. Для подобной проверки используйте свойство Found объекта Find совместно с инструкцией If...Then, как показано на примере следующей заготовки программного кода:

If .Found = True Then

(выполнение определенных действий с найденным текстом)

Else

(отображение соответствующего сообщения)

End If

Если метол Execute нашел необходимый текст, исходный диапазон или выделенная область переопределяются таким образом, чтобы содержать найденный текст. Это очень важный момент, поскольку это означает, что вы можете работать с найденным текстом посредством свойств и методов исходного объекта. В следующем примере, представляющем собой расширенный вариант первого фрагмента кода из настоящего раздела, инструкция .Parent. Italic = True обращается к родительскому объекту по отношению к объекту Find, т.е. диапазону OpenRange. При выполнении этой инструкции диапазон OpenRange теперь содержит только найденный фрагмент текста, так как только в нем предусмотрено форматирование курсивом:

With OpenRange.Find

.СlearFormatting

.Text = "pogosticks"

If .Found = True Then

.Parent.Italic = True

Else

MsgBox "No pogosticks found."

End If

End with

Объект Reolacement принадлежит (а значит, является его свойством) объекту Find. При написании кода для операции поиска и замены вам следует задать свойства и выполнить методы объекта Replacement.

Следующий фрагмент кода заменяет все экземпляры фразы pogosticks словом skateboards. Выделенная область изменяется при выполнении критерия поиска, поскольку доступ к объекту Find осуществляется через объект Selection:

With ActiveDocument.Content.Find

.ClearFormatting

.Text = "pogosticks"

With .Replacement

.ClearFormatting

.Text == "skateboards"

End With

.Execute Replace := wdReplaceAll

End With

Обратите внимание на то, что метод Execute может использовать аргумент Replace, предназначенный для контроля за тем, будут ли заменены все обнаруженные экземпляры обнаруженного фрагмента текста, или только первый.

Поиск и замена форматирования

Для поиска текста с определенным форматированием используйте свойства объекта Find, касающиеся форматирования. Они идентичны свойствам, используемым при работе с форматированием диапазона или выделенной области, как я уже отмечал в разделе "Форматирование текста", раньше в настоящей главе. Вы можете использовать те же свойства объекта Replacement, если хотите указать форматирование для замещающего текста.

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