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

* Для выделения диапазона используется его метод Select. Например, для объекта RangeR команда имеет вид RangeR. Select.

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

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

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

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

Для добавления к выделенной области слова, которое будет следовать сразу за ней, используйте такую инструкцию:

Selection.Expand(wdWord)

Вы можете использовать любую из следующих констант для расширения объекта; wdCharct er, wdWord, wdSent ence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow, wdTable и (только для объектов Selection) wdLine. По умолчанию используется константа wdWord.

Теперь нам следует остановиться на одном щекотливом моменте: объекты Selection (но не диапазоны) также содержат метод Expand. Этот метод включает соответствующее средство Word, которое позволяет расширять выделенную область при перемещении указателя мыши. Каждый раз, когда программа вызывает метод Extend, выделенная область увеличивается на блок текста, который следует сразу за точкой вставки: текущее слово, предложение, абзац, выделенный фрагмент пли целый документ. Если вы указали аргумент в виде одного символа, например, Selection.Expand ( "С" ). выделенная область будет расширена вплоть до первого встретившегося указанного символа.

Word VBA позволяет вам повторно определять начало и конец диапазона или выделенной области. Только имейте в виду, что методы, в имени которых присутствует слово Move, изменяют расположение диапазона или выделенной области: они не перемещают текст, который содержится в указанном объекте.

Метод Move изменяет диапазон или выделенную область, начиная с их сжатия, отмечая их расположение, а в них уже нет никакого текста. Расположение совпадает с началом исходного объекта. После этого метод Move перемещает "сжатый" объект в соответствии с вашими инструкциями. По окончании перемещения вы можете использовать методы Expand и Mover,nd для наполнения объекта текстом.

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

"Расширение диапазонов и выделенных областей" раньше в этой главе). Аргумент Count представляет собой целое положительное число, если вы хотите перемешать объект вперед по документу (т.е. к его концу), или отрицательное, если вы хотите перемещать объект назад по документу. В приведенном ниже примере аргументы не заключены в скобки, поскольку возвращенное методом значение (количество перемещенных элементов) здесь не используется:

oTheRange .Move Unit : = waParagraph, Count, : = -2

Методы MoveStart. и MoveEnd работают практически так же, как и метод Move, только они изменяют начальную или конечную точку диапазона или выделенной области соответственно. Приведенная ниже инструкция перемешает начало выделенной области на три слова ближе к концу документа:

Select-on.KoveStart Unit : = wdWord, Count := 3

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

Еще одна пара методов, Start Of или EndOf, перемешает или расширяет начало или конец диапазона или выделенной области. Метод Start Of перемещает начало объекта обратно к началу текущего блока, в то время как метод EndOt перемешает конец объекта вперед к концу текущего блока.

Вы можете использовать аргумент Extend с любым методом для контроля над действиями Word. Если перемешаемая сторона объекта уже находится с того края, к которому вы пытаетесь ее переместить, ничею не происходит. Используйте константу wdMove для сжимания объекта или константу wdExtend для перемещения только указанной стороны. Ниже приведен соответствующий пример:

Selection. Start Of Unit := wdSentence, Extend := wdMove

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

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

Selection.Collapse

А этот пример сжимает выделенную область к ее конечной точке:

Selection.Collapse( Direction:=wdCollapseEnd)

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

Диапазон.MoveEnd Unit := wdCharacter, Count := -1

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

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

Хотя использование буфера обмена для передачи текста из одного места в другое кажется вполне привычным, этот метод не всегда оказывается самым эффективным. Намного удобнее использовать свойства Text или FormattedText диапазона или выделенной области. Залайте эти свойства равными диапазону или выделенной области, содержащим текст, который вы хотите передать, и все. Объект назначения должен быть сжат до тех пор, пока передаваемый текст не должен будет заменить существующий текст в объекте.

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

With ActiveDocument.Bookmarks("TheBookmark")

Set RangeY = _

ActiveDocument.Range(Start:=.Start, End=.Start)

End With

RangeY.Text = Selection.Text

Для передачи вместе с текстом и его форматирования просто замените свойство Text свойством FormattedText.

Простейшим для запоминания приемом добавления текста является задание свойства Text диапазона или выделенной области равным тексту, который вы решили вставить. Это проиллюстрировано на примере, показанном ниже: