Работа с объектами 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 и обратная связь.