Работа с объектами range
Общая задача при использовании Visual Basic заключается в том, чтобы указать область в документе, а затем выполнить с ней какие-либо действия, такие как вставка текста или применение форматирования. Например, может потребоваться написать макрос, который находит слово или фразу в части документа. Часть документа может быть представлена объектом Range . После идентификации объекта Range можно применить методы и свойства объекта Range для изменения содержимого диапазона.
Объект Range ссылается на смежные области в документе. Каждый объект Range определяется начальной и конечной позицией символов. Как и в случае с закладками в документе, объекты Range используются в процедурах Visual Basic для идентификации определенных частей документа. Объект Range может быть таким же маленьким, как точка вставки, или размером всего документа. Однако, в отличие от закладки, объект Range существует только во время выполнения процедуры, которая его определила.
Свойства Start, End и StoryType однозначно определяют объект Range . Свойства Start и End возвращают или задают начальную и конечную позиции символов объекта Range . Позиция символа в начале документа равна нулю, позиция после первого символа — единица и т. д. Существует несколько типов истории, представленных константами WdStoryType свойства StoryType .
Примечание.
Объекты range не зависят от выделенного объекта. То есть можно определить и изменить диапазон, не изменяя текущий выбор. Вы также можете определить несколько диапазонов в документе, но в каждой области документа есть только один выбор.
Использование метода Range
Используйте метод Range объекта Document , чтобы создать объект Range , расположенный в основной истории и имеющий заданные начальные и конечные точки. В следующем примере создается объект Range , который начинается с начала первого символа и расширяется до десятого символа.
Sub SetNewRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub
Вы можете увидеть, что объект Range создается при применении свойства или метода к объекту Range . Например, ниже применяется полужирное форматирование к первым 10 символам в активном документе.
Sub SetBoldRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
rngDoc.Bold = True
End Sub
Если необходимо ссылаться на объект Range несколько раз, можно использовать инструкцию Set , чтобы задать переменную, равную объекту Range . Однако если необходимо выполнить только одно действие с объектом Range , не нужно хранить объект в переменной. Тот же результат можно получить с помощью только одной инструкции, которая определяет диапазон и изменяет свойство Bold .
Sub BoldRange()
ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub
Как и закладка, диапазон может охватывать группу символов или помечать расположение в документе. Объект Range в следующем примере имеет одинаковые начальные и конечные точки. Диапазон не содержит текста. В следующем примере текст вставляется в начало активного документа.
Sub InsertTextBeforeRange()
Dim rngDoc As Range
Set rngDoc = ActiveDocument.Range(Start:=0, End:=0)
rngDoc.InsertBefore "Hello "
End Sub
Вы можете определить начало и конечные точки диапазона с помощью символьных номеров позиций, как показано выше, или использовать свойства Start и End с такими объектами, как Selection, Bookmark или Range . В следующем примере создается объект Range , начинающийся в начале второго абзаца и заканчивающийся после третьего абзаца.
Sub NewRange()
Dim doc As Document
Dim rngDoc As Range
Set doc = ActiveDocument
Set rngDoc = doc.Range(Start:=doc.Paragraphs(2).Range.Start, _
End:=doc.Paragraphs(3).Range.End)
End Sub
Дополнительные сведения и примеры см. в методе Range .
Использование свойства Range
Свойство Range отображается в нескольких объектах, таких как Paragraph, Bookmark и Cell, и используется для возврата объекта Range . В следующем примере возвращается объект Range , ссылающийся на первый абзац активного документа.
Sub SetParagraphRange()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub
После получения объекта Range можно использовать любые его свойства или методы для изменения объекта Range . В следующем примере выбирается второй абзац в активном документе, а затем выделяется по центру.
Sub FormatRange()
ActiveDocument.Paragraphs(2).Range.Select
Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub
Если требуется применить множество свойств или методов к одному и тому же объекту Range , можно использовать with... End With structure. В следующем примере текст в первом абзаце активного документа форматируется.
Sub FormatFirstParagraph()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(1).Range
With rngParagraph
.Bold = True
.ParagraphFormat.Alignment = wdAlignParagraphCenter
With .Font
.Name = "Stencil"
.Size = 15
End With
End With
End Sub
Дополнительные сведения и примеры см. в разделе Свойства Range .
Переопределения объекта Range
Используйте метод SetRange для переопределений существующего объекта Range . В следующем примере диапазон определяется как текущий выбор. Затем метод SetRange переопределяет диапазон таким образом, что он ссылается на текущий выделенный фрагмент и следующие 10 символов.
Sub ExpandRange()
Dim rngParagraph As Range
Set rngParagraph = Selection.Range
rngParagraph.SetRange Start:=rngParagraph.Start, _
End:=rngParagraph.End + 10
End Sub
Дополнительные сведения и примеры см. в статье Метод Range для Document.
Примечание.
При отладке макросов можно использовать метод Select , чтобы убедиться, что объект Range ссылается на правильный диапазон текста. Например, ниже выбирается объект Range , который ссылается на второй и третий абзацы активного документа, а затем форматирует шрифт выделенного фрагмента.
Sub SelectRange()
Dim rngParagraph As Range
Set rngParagraph = ActiveDocument.Paragraphs(2).Range
rngParagraph.SetRange Start:=rngParagraph.Start, _
End:=ActiveDocument.Paragraphs(3).Range.End
rngParagraph.Select
Selection.Font.Italic = True
End Sub
Поддержка и обратная связь
Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.