VBA для чайников
Шрифт:
Приведенный ниже пример перемещает именованный диапазон в документе на два абзаца назад. Обратите внимание на то, что вы используете именованную константу в качестве значения аргумента 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
Удалить
Вы можете вставить текст, раньше помещенный в буфер обмена, в любой диапазон или выделенную область, воспользовавшись методом 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 диапазона или выделенной области равным тексту, который вы решили вставить. Это проиллюстрировано на примере, показанном ниже:
Range2.Text = "Эй, эй! А ведь дома-то никого нет!"
Просто запомните, что использование свойства Text приводит к замене любого существующего в объекте. Во избежание этого (если только вы действительно не хотите заменить существующий текст), сначала сожмите объект.
Используйте методы Insert Before или Insert After объектов Range или Selection для вставки текста в определенном месте документа, не затрагивая при этом существующий текст. Эти методы позволяют вставить новый текст непосредственно перед или после указанного объекта соответственно. Word включает вставленный текст в выделенную область или диапазон.
При использовании любого из методов единственным аргументом является текст, который вы хотите вставить. Приведенный ниже фрагмент кода вставляет новый абзац, содержащий слова Dairy Entry в начало выделенной области (обратите внимание на использование такой константы VBA, как vbCr, для добавления знака абзаца). После этого в конец добавляется новый абзац, который начинается с текущей даты. Если вы выделили целый абзац до выполнения этого кода, абзац, содержащий текущую дату, появится после знака абзаца в выделенной области.