Word vba activedocument range

title keywords f1_keywords ms.prod api_name ms.assetid ms.date ms.localizationpriority

Range object (Word)

vbawd10.chm2398

vbawd10.chm2398

word

Word.Range

15a7a1c4-5f3f-5b6e-60e9-29688de3f274

05/23/2019

medium

Range object (Word)

Represents a contiguous area in a document. Each Range object is defined by a starting and ending character position.

Remarks

Similar to the way bookmarks are used in a document, Range objects are used in Visual Basic procedures to identify specific portions of a document. However, unlike a bookmark, a Range object only exists while the procedure that defined it is running. Range objects are independent of the selection. That is, you can define and manipulate a range without changing the selection. You can also define multiple ranges in a document, while there can be only one selection per pane.

Use the Range method to return a Range object defined by the given starting and ending character positions. The following example returns a Range object that refers to the first 10 characters in the active document.

Set myRange = ActiveDocument.Range(Start:=0, End:=10)

Use the Range property to return a Range object defined by the beginning and end of another object. The Range property applies to many objects (for example, Paragraph, Bookmark, and Cell). The following example returns a Range object that refers to the first paragraph in the active document.

Set aRange = ActiveDocument.Paragraphs(1).Range

The following example returns a Range object that refers to the second through fourth paragraphs in the active document.

Set aRange = ActiveDocument.Range( _ 
 Start:=ActiveDocument.Paragraphs(2).Range.Start, _ 
 End:=ActiveDocument.Paragraphs(4).Range.End)

For more information about working with Range objects, see Working with Range objects.

Methods

  • AutoFormat
  • Calculate
  • CheckGrammar
  • CheckSpelling
  • CheckSynonyms
  • Collapse
  • ComputeStatistics
  • ConvertHangulAndHanja
  • ConvertToTable
  • Copy
  • CopyAsPicture
  • Cut
  • Delete
  • DetectLanguage
  • EndOf
  • Expand
  • ExportAsFixedFormat
  • ExportAsFixedFormat2
  • ExportFragment
  • GetSpellingSuggestions
  • GoTo
  • GoToEditableRange
  • GoToNext
  • GoToPrevious
  • ImportFragment
  • InRange
  • InsertAfter
  • InsertAlignmentTab
  • InsertAutoText
  • InsertBefore
  • InsertBreak
  • InsertCaption
  • InsertCrossReference
  • InsertDatabase
  • InsertDateTime
  • InsertFile
  • InsertParagraph
  • InsertParagraphAfter
  • InsertParagraphBefore
  • InsertSymbol
  • InsertXML
  • InStory
  • IsEqual
  • LookupNameProperties
  • ModifyEnclosure
  • Move
  • MoveEnd
  • MoveEndUntil
  • MoveEndWhile
  • MoveStart
  • MoveStartUntil
  • MoveStartWhile
  • MoveUntil
  • MoveWhile
  • Next
  • NextSubdocument
  • Paste
  • PasteAndFormat
  • PasteAppendTable
  • PasteAsNestedTable
  • PasteExcelTable
  • PasteSpecial
  • PhoneticGuide
  • Previous
  • PreviousSubdocument
  • Relocate
  • Select
  • SetListLevel
  • SetRange
  • Sort
  • SortAscending
  • SortByHeadings
  • SortDescending
  • StartOf
  • TCSCConverter
  • WholeStory

Properties

  • Application
  • Bold
  • BoldBi
  • BookmarkID
  • Bookmarks
  • Borders
  • Case
  • Cells
  • Characters
  • CharacterStyle
  • CharacterWidth
  • Columns
  • CombineCharacters
  • Comments
  • Conflicts
  • ContentControls
  • Creator
  • DisableCharacterSpaceGrid
  • Document
  • Duplicate
  • Editors
  • EmphasisMark
  • End
  • EndnoteOptions
  • Endnotes
  • EnhMetaFileBits
  • Fields
  • Find
  • FitTextWidth
  • Font
  • FootnoteOptions
  • Footnotes
  • FormattedText
  • FormFields
  • Frames
  • GrammarChecked
  • GrammaticalErrors
  • HighlightColorIndex
  • HorizontalInVertical
  • HTMLDivisions
  • Hyperlinks
  • ID
  • Information
  • InlineShapes
  • IsEndOfRowMark
  • Italic
  • ItalicBi
  • Kana
  • LanguageDetected
  • LanguageID
  • LanguageIDFarEast
  • LanguageIDOther
  • ListFormat
  • ListParagraphs
  • ListStyle
  • Locks
  • NextStoryRange
  • NoProofing
  • OMaths
  • Orientation
  • PageSetup
  • ParagraphFormat
  • Paragraphs
  • ParagraphStyle
  • Parent
  • ParentContentControl
  • PreviousBookmarkID
  • ReadabilityStatistics
  • Revisions
  • Rows
  • Scripts
  • Sections
  • Sentences
  • Shading
  • ShapeRange
  • ShowAll
  • SpellingChecked
  • SpellingErrors
  • Start
  • StoryLength
  • StoryType
  • Style
  • Subdocuments
  • SynonymInfo
  • Tables
  • TableStyle
  • Text
  • TextRetrievalMode
  • TextVisibleOnScreen
  • TopLevelTables
  • TwoLinesInOne
  • Underline
  • Updates
  • WordOpenXML
  • Words
  • XML

See also

  • Word Object Model Reference

[!includeSupport and feedback]

Show All

Working with Range Objects

A common task when using Visual Basic is to specify an area in a document and then do something with it, such as insert text or apply formatting. For example, you may want to write a macro that locates a word or phrase within a portion of a document. The portion of the document can be represented by a Range
object. After the Range object is identified, methods and properties of the Range object can be applied in order to modify the contents of the range.

A Range object refers to a contiguous area in a document. Each Range object is defined by a starting and ending character position. Similar to the way bookmarks are used in a document, Range objects are used in Visual Basic procedures to identify specific portions of a document. A Range object can be as small as the insertion point or as large as the entire document. However, unlike a bookmark, a Range object only exists while the procedure that defined it is running.

The Start, End
and StoryType
properties uniquely identify a Range object. The Start and End properties return or set the starting and ending character positions of the Range object. The character position at the beginning of the document is zero, the position after the first character is one, and so on. There are eleven different story types represented by the WdStoryType constants of the StoryType property.

Note  Range objects are independent of the selection. That is, you can define and modify a range without changing the current selection. You can also define multiple ranges in a document, while there is only one selection per document pane.

Using the Range method

The Range
method is used to create a Range object in the specified document. The Range method (which is available from the Document
object) returns a Range object located in the main story given a start and end point. The following example creates a Range object that is assigned to a variable.

    Sub SetNewRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
End Sub
  

The variable refers to the first ten characters in the active document. You can see that the Range object has been created when you apply a property or method to the Range object stored in a variable. The following example applies bold formatting to the first ten characters in the active document.

    Sub SetBoldRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=10)
    rngDoc.Bold = True
End Sub
  

When you need to refer to a Range object multiple times, you can use the Set statement to set a variable equal to the Range object. However, if you only need to perform a single action on a Range object, there’s no need to store the object in a variable. The same results can be achieved using just one instruction that identifies the range and changes the Bold
property.

    Sub BoldRange()
    ActiveDocument.Range(Start:=0, End:=10).Bold = True
End Sub
  

Like a bookmark, a range can span a group of characters or mark a location in a document. The Range object in the following example has the same starting and ending points. The range does not include any text. The following example inserts text at the beginning of the active document.

    Sub InsertTextBeforeRange()
    Dim rngDoc As Range
    Set rngDoc = ActiveDocument.Range(Start:=0, End:=0)
    rngDoc.InsertBefore "Hello "
End Sub
  

You can define the beginning and end points of a range using the character position numbers as shown above, or use the Start and End properties with objects such as Selection, Bookmark, or Range. The following example creates a Range object beginning at the start of the second paragraph and ending after the third paragraph.

    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
  

For additional information and examples, see the Range
method.

Using the Range property

The Range property appears on multiple objects, such as Paragraph, Bookmark, and Cell, and is used to return a Range object. The following example returns a Range object that refers to the first paragraph in the active document.

    Sub SetParagraphRange()
    Dim rngParagraph As Range
    Set rngParagraph = ActiveDocument.Paragraphs(1).Range
End Sub
  

After you have a Range object, you can use any of its properties or methods to modify the Range object. The following example selects the second paragraph in the active document and then centers the selection.

    Sub FormatRange()
    ActiveDocument.Paragraphs(2).Range.Select
    Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter
End Sub
  

If you need to apply numerous properties or methods to the same Range object, you can use the With…End With structure. The following example formats the text in the first paragraph of the active document.

    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
  

For additional information and examples, see the Range
property topic.

Redefining a Range object

Use the SetRange
method to redefine an existing Range object. The following example defines a range as the current selection. The SetRange method then redefines the range so that it refers to current selection plus the next ten characters.

    Sub ExpandRange()
    Dim rngParagraph As Range
    Set rngParagraph = Selection.Range
    rngParagraph.SetRange Start:=rngParagraph.Start, _
        End:=rngParagraph.End + 10
End Sub
  

For additional information and examples, see the SetRange method.

Note  When debugging your macros, you can use the Select
method to ensure that a Range object is referring to the correct range of text. For example, the following example selects a Range object, which refers the second and third paragraphs in the active document, and then formats the font of the selection.

    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
  

Microsoft Word Range Object VBA (Visual Basic for Applications)

Range

Refers an area in a document to perform actions, like insert text or apply formatting. For example, you may want to write a macro that locates a word or phrase within a portion of a document. The portion of the document can be represented by a Range. After the Range object is identified, methods and properties of the Range object can be applied to modify the contents of the range.

Note: Range object is not as Selection object in Word. There is only one selection per document but Ranges can be multiple.

Create/Add Range

Sub SetNewRange() 
	Dim rngDoc As Range 
	Set rngDoc = ActiveDocument.Range(Start:=0, End:=10) 
End Sub

Bold property

Sub SetRangeToBold() 
	Dim rngDoc As Range 
	Set rngDoc = ActiveDocument.Range(Start:=0, End:=10) 
	rngDoc.Bold = True 
End Sub

InsertBefore

Sub InsertTextBeforeRange() 
	Dim rngDoc As Range 
	Set rngDoc = ActiveDocument.Range(Start:=0, End:=0) 
	rngDoc.InsertBefore "Hello " 
End Sub

Output

Paragraph with Range

Sub GetNewRange() 
	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

List objects which exposes Range

  • Selection
  • Document
  • Paragraph
  • Bookmark
  • Cell

Alignment

Sub FormattingRange() 
	ActiveDocument.Paragraphs(2).Range.Select 
	Selection.ParagraphFormat.Alignment = wdAlignParagraphCenter 
End Sub

SetRange

Sometimes you add or delete contents from your document which are referenced under a Range object. Since Range object is predefined and holding reference before change would not know what has been added or deleted from given range. To fit Range back to amended range Word offers SetRange method by which you can expand or shrink your range object. The SetRange method then redefines the range so that it refers to the current selection plus the next 10 characters.

Code example

Sub ResizeRange() 
	Dim rngParagraph As Range
	'Get current range
	Set rngParagraph = Selection.Range 
	'Extend range by 10 chars
	rngParagraph.SetRange Start:=rngParagraph.Start, End:=rngParagraph.End + 10 
End Sub

Next>>Working with Tables in Word VBA

Последнее время я часто сталкиваюсь с его использованием. На изученных мною ресурсах, посвященных VBA для Word, почему-то мало внимания уделяется такому важному представителю объектной модели. С его помощью можно, поистине, творить чудеса с документом.
Этот объект гораздо удобнее Selection, потому что позволяет не выделять нужную область на экране, а работать прямо с представлением документа в памяти. Это заметно ускоряет работу макросов, которые, по правде сказать, не отличаются быстродействием. При отладке программ бывает полезно воспользоваться методом Range.Select, чтобы убедиться, что вы работаете с нужным вам диапазоном.
Что же это за объект? Сразу хочу предупредить, что писать я буду, основываясь на своем понимании найденного и прочитанного в других источниках. В дословном переводе Range означает «Диапазон». Применительно к Word  — это означает диапазон свойств или методов, доступных для того или иного объекта. Например, как узнать текст второго абзаца в документе? Вот так:

1 ActiveDocument.Paragraphs(2).Range.Text

Стоит отметить, что это вернет весь текст в абзаце с символом конца абзаца (). Его можно удалить функцией Replace заменив символ vbCr на пустую строку.
Но главная фишка объекта Range совсем не в этом. А в том, что его можно передвигать и изменять в размерах практически произвольно (в пределах документа, естественно). У каждого объекта Range есть два свойства: Range.Start и Range.End. Начальный и конечный символ диапазона, считая от начала документа. Начало и конец диапазона можно задавать, указывая эти свойства напрямую, а можно такой конструкцией:

1 2 Dim oRng As Range Set oRng = ActiveDocument.Range(20, 50)

Изменить размер уже существующего диапазона можно с помощью метода SetRange, в котором указать номер символа, с которого диапазон начинается, и каким заканчивается. Этот метод используется тогда, когда нужно изменить уже существующий диапазон. Этот метод ничего не возвращает, а работает со своим родительским объектом

1 2 3 Dim oRng As Range Set oRng = ActiveDocument.Range oRng.SetRange 20, 50

С помощью Range можно получить такие объекты документа, для которых не предусмотрено коллекций, как, например, для абзацев (коллекция Paragraphs). Такими «бесхозными» объектами являются строки и страницы. Кто знает другие, пусть напишет.
Как получить страницу из документа со всем ее содержимым? Коллекции Pages не существует, что же делать? Вот здесь и понадобится Range и его метод GoTo

1 2 3 4 5 6 7 8 9 10 11 12 13 Sub TestGoTo() Dim oRng As Range 'Даем в переменную oRng начало третьей страницы в документе. Set oRng = ThisDocument.Range.GoTo(wdGoToPage, wdGoToNext, , "3") MsgBox "Третья страница начинается с " & oRng.Start & " символа.", 64, "Метод GoTo" 'Расширяем диапазон oRng на всю третью страницу Set oRng = ThisDocument.Range(oRng.Start, oRng.GoToNext(wdGoToPage).Start) MsgBox "На третьей странице находится " & oRng.Paragraphs.Count & " абзацев.", 64, "Метод GoTo" 'Берем 10 строку с третьей страницы Set oRng = oRng.GoTo(wdGoToLine, wdGoToNext, 10) Set oRng = ThisDocument.Range(oRng.Start, oRng.GoToNext(wdGoToLine).Start) MsgBox "В десятой строке третьей страницы содержится " & oRng.Characters.Count & " символов.", 64, "Метод GoTo" End Sub

Таким образом можно, например, сохранить каждую страницу документа в файл. На одном форуме я выкладывал пример такого макроса, нашлись даже добровольцы, которые довели его почти до совершенства.

2006 г.

Word и его объекты
Лекция из курса «Основы офисного программирования и документы Word»

Биллиг Владимир Арнольдович
Интернет-Университет Информационных Технологий, INTUIT.ru

Назад Оглавление Вперёд

Документ Word и его проекты

Объекты, задающие программный проект, являются общими для всех документов Office 2000, в том числе и документа Word. Этой важной теме — программной работе с такими объектами посвящена лекция 4

Текст и объекты Range и Selection

Основной частью документа Word является, конечно, текст этого документа. Уже было сказано, как структурирован текст документа, рассмотрены коллекции — Characters, Words, Sentences, Paragraphs, которые позволяют работать с символами, словами, предложениями и абзацами текста. Говорил я также и о том, что только этими коллекциями не обойтись, и необходим общий класс объектов, позволяющий задать произвольную область текста. Таковыми являются два важных класса Range и Selection. Объекты этих классов широко используются при работе с текстом. Документы, поддокументы, разделы, все вышеупомянутые коллекции от Characters до Words имеют метод или свойство Range, возвращающие в качестве результат объект Range. Каждый объект Range задает область определения некоторого объекта, включая текст и все объекты, связанные с этим текстом — комментарии, ссылки и прочее. Так, если некоторый объект вызвал метод Range, то возвращаемый объект Range будет содержать область определения объекта, вызвавшего метод.

Объект Selection представляет выделенную область. Поскольку в каждом окне может быть только одна выделенная область, то одновременно может существовать лишь несколько объектов Selection по одному на каждое существующее окно или подокно. Заметим также, что, объект Selection всегда существует в окне, даже если и не сделано явного выделения некоторой области, в последнем случае объект Selection задает точку вставки, определенную позицией курсора.

Объект Document имеет метод Range, возвращающий объект Range, и метод Select, создающий объект Selection. Метод Range — это функция, возвращающая в качестве результата объект Range; метод Select — это процедура без параметров, которая создает объект Selection в качестве побочного эффекта. Заметьте существенную разницу между методами Range и Selection. В первом случае возвращается сам объект и поэтому можно запомнить возвращаемый объект и в программе одновременно работать с несколькими такими объектами. В случае вызова метода Selection объект не возвращается, следовательно, запомнить его нельзя, что и гарантирует уникальность объекта Selection.

Объект Range имеет метод Select, выделяющий область объекта Range, и определяющий, тем самым, новый объект Selection. Симметрично, объект Selection имеет свойство Range, возвращающее объект Range, соответствующий выделенной области.

Объекты Range и Selection столь же многообразны по своей структуре, как и объект Document. И даже большинство свойств у этих трех объектов одни и те же. Эти три объекта являются схожими. Это понятно, так как большинство частей документа: предложения, абзацы, разделы, таблицы, рисунки, комментарии, ссылки и многое другое — может составлять любую подобласть документа, в том числе и выделенную подобласть. Значит, большинство ранее описанных частей документа являются и частями (свойствами) объектов Range и Selection. Это приятно — ведь с большинством свойств этих объектов мы уже знакомы!

Объект Range напоминает матрешку: в каждую область вложена область поменьше. Вот пример корректного (хоть и не самого эффективного) задания объекта Range:

Листинг 1: html, txt

Сколько объектов Range упоминается в этом предложении? Правильный ответ: 6, но не 3. Напомним: на нижнем уровне отсутствуют классы, определяющие символ, слово или предложение — все эти объекты принадлежат классу Range.

Для объекта Selection нельзя построить такую хитрую цепочку вложений — ведь метод Select не возвращает объект Selection. Но можно построить такую же «хитрую» последовательность операторов, которая задает сужающуюся область выделения:

Листинг 1: html, txt

Работа с текстом

Объекты Range и Selection позволяют выполнять основные операции над текстом (и не только над текстом): «выделить», «добавить», «заменить», «удалить». У наших объектов большой набор методов, позволяющих реализовать эти операции. Все рассматриваемые здесь методы принадлежат обоим объектам, если не сделана специальная оговорка.

Выделение

Говоря в этом параграфе о выделении, я имею в виду не применение метода Select, а выделение в более широком смысле, умение задать некоторую подобласть данной области. Выделить некоторую часть текста означает, по существу, определение объекта Range или Selection. Оба объекта задают непрерывную область, а их свойства Start и End позволяют задать начало и конец области. Меняя эти свойства, можно задать нужную область выделения. Этот основной способ выделения мы не раз демонстрировали в наших примерах:

Dim myRange As Range, myRange1 As Range
With ActiveDocument
   Set myRange = .Range(Start:=.Sections(2).Range.Paragraphs(3).Range.Start, _
                              End:=.Sections(3).Range.Paragraphs(5).Range.End)
   Set myRange1 = .Sections(3).Range.Paragraphs(1).Range
End With

Листинг 1: html, txt

В первом случае при задании области используются параметры Start и End, во втором — задается вся область данного объекта. Область может изменяться автоматически при добавлении или удалении из нее части текста. Изменить область можно и путем ее перемещения. Этим занимается специальная группа методов перемещения Move. Прежде чем говорить о перемещении, рассмотрим сжатие области. Нередко нужна пустая область — точка вставки, параметры Start и End которой совпадают. Поэтому простейший способ сжатия — задать совпадающие значения этих параметров:

Листинг 1: html, txt

Для сжатия области можно применять специальный метод сжатия — Collapse(Direction). Область стягивается в начальную или конечную позицию. Направление сжатия задает параметр Direction, принимающий значения wdCollapseStart или wdCollapseEnd. По умолчанию область стягивается в начальную точку (значение параметра: wdCollapseStart). Если сжимается абзац, и он стягивается в конечную точку, точка вставки переносится за метку конца абзаца и устанавливается в начало следующего абзаца. Если такой эффект нежелателен, после сжатия применяется метод перемещения MoveEnd, передвигающий точку вставки назад на один символ:

Set myRange = ActiveDocument.Paragraphs(1).Range
myRange.Collapse Direction:=wdCollapseEnd
myRange.MoveEnd Unit:=wdCharacter, Count:=-1

Листинг 1: html, txt

Если есть методы сжатия области, то должны быть и методы расширения области. Основным из них является метод Expand(Unit). В зависимости от значения параметра Unit область можно расширить на слово, предложение, абзац, раздел, на строку или столбец таблицы, или на всю таблицу. Для объекта Selection область можно расширить на всю строку. Для расширения области на весь фрагмент можно использовать метод WholeStory, что впрочем эквивалентно вызову метода Expand(Unit := wdStory)

Метод Move является основным методом перемещения. Остальные методы — в той или иной степени его модификации. Метод Move(Unit, Count) сжимает область в точку, стягивая ее в начало или конец, и затем перемещает точку вставки. Параметр Unit определяет единицы перемещения, а Count — количество этих единиц и направление стягивания и перемещения (по умолчанию 1). Положительные значения этого параметра задают стягивание к концу и перемещение вперед, отрицательные — стягивание в начало и перемещение назад. Само стягивание означает перемещение на одну единицу. Метод возвращает количество единиц, на которое фактически произошло перемещение, или 0, если оно не осуществлено. Параметр Unit принимает значения wdCharacter (по умолчанию), wdWord, wdSentence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow и wdTable.

Методы перемещения на сам текст не влияют — лишь изменяют область, заданную объектами Range и Selection. Поэтому эти методы применимы только к переменным типа Range, но не к фиксированным областям. Например, запись:

Листинг 1: html, txt

не имеет эффекта, поскольку область первого абзаца — вещь неизменяемая.

Метод Move стягивает область в точку, которая и перемещается, поэтому после его выполнения область исчезает, и остается только точка вставки. Методы MoveStart и MoveEnd перемещают начальную или конечную точку области, обычно расширяя тем самым область.

Конечно, для перемещения по тексту документу есть много различных возможностей, кроме группы методов Move. Стоит упомянуть группу методов Next, основным из которых является метод Next(Unit,Count). Основное отличие от метода Move с теми же параметрами состоит в том, что метод Next возвращает сам объект Range, в отличие от метода Move, возвращающего число символов, на которое произошло перемещение. Напомним также о тех возможностях перемещения, которыми обладают объекты Browser и Hyperlink, напомним о закладках, специально предназначенных для перехода к ним.

Удаление текста

Метод Delete позволяет удалить текст. Вызванный без параметров, он удаляет вызывающий его объект Range или Selection. Если он применен в форме Delete(Unit,Count), удаляется часть текста в указанной области. Параметр Unit задает единицы, но при удалении возможны только два значения: wdWord и wdCharacter. Параметр Count задает количество удаляемых единиц. Если область стянута в точку, удаляются символы перед точкой вставки или после нее в зависимости от знака параметра Count. Вот несколько примеров:

'Удаляется текст в области объекта myRange
myRange.Delete
' Удаляются первые три слова из области myRange1
myRange1.Delete Unit:= wdWord, Count :=3
'Область стягивается в точку
myRange1.Collapse Direction := wdCollapseStart
'Удаляются три первых слова из области, предшествующей myRange1
myRange1.Delete Unit:= wdWord, Count :=-3

Листинг 1: html, txt

Вставка текста

Группа методов Insert объектов Range и Selection позволяет осуществлять вставки в документ. Для вставки текста используются методы InsertBefore(Text) и InsertAfter(Text). Параметр Text типа String задает текст, вставляемый до или после области, заданной объектами Range или Selection. После вставки текста область автоматически расширяется, включая в себя добавляемый текст. Вот пример вставки нового абзаца в начало документа:

Dim myRange As Range
Set myRange = ActiveDocument.Range(Start:=0, End:=0)
myRange.Text = "дорогой "
myRange.InsertBefore "Мой "
myRange.InsertAfter "друг! "
myRange.InsertParagraphAfter

Листинг 1: html, txt

Свойство Text позволяет заменять текст в выделенной области, поэтому нет нужды вызывать метод Insert(Text), — лучше использовать свойство. Методы InsertBefore и InsertAfter безопасны, так как текст добавляется, не изменяя содержимого области. При вставке внутрь области, например, при использовании метода InsertSymbol или InsertParagraph, заменяется содержимое области. Эта вроде бы безобидная программка сотрет все содержимое документа, заменив его пустым абзацем:

Set myRange = ActiveDocument.Range
myRange.InsertParagraph

Листинг 1: html, txt

Говоря о методах вставки текста, нельзя не упомянуть о таком мощном методе, как InsertFile — он позволяет вставлять не только текст или таблицу Excel, но и целый документ, хранящийся в файле. Вот простой пример вызова метода, при котором в начало активного документа вставляется существующий документ:

Public Sub test1()
   Dim myRange As Range
   Dim myPath As String
   
   With ActiveDocument
      myPath = .Path
      Set myRange = .Range(Start:=0, End:=0)
      myRange.InsertFile myPath & "DocTwo.doc"
   End With
End Sub

Листинг 1: html, txt

Работа с буфером

Известно, как полезен буфер при работе с одним и, особенно, с несколькими документами. Объекты Range и Selection в полной мере позволяют задействовать все возможности буфера. Метод Copy, не имеющий параметров, копирует объект (содержимое области) в буфер. Метод Cut, действуя аналогично, копирует объект в буфер, заодно удаляя его. Заметьте, что в отличие от предыдущей версии, теперь метод Cut работает, как ему положено, не только копируя объект, но и удаляя его, ранее удаления не происходило, вместо этого объект, вызывавший метод стягивался в точку. Метод Paste позволяет приклеить объект, помещенный в буфер. Рассмотрим пример:

.Public Sub test1()
   Dim myRange As Range
   Set myRange = ActiveDocument.Paragraphs(5).Range
   myRange.Select
   'Добавляем новый абзац
   myRange.InsertAfter "New Text"
   myRange.InsertParagraphAfter
   'Выделяем и затем вырезаем добавленный абзац и помещаем его в буфер
   myRange.MoveStart Unit:=wdParagraph
   myRange.Select
   Selection.Cut
   'Добавляем новый абзац
   Selection.InsertAfter "Новый текст!"
   Selection.InsertParagraphAfter
   'Добавляем абзац из буфера
   Selection.Collapse Direction:=wdCollapseEnd
   Selection.Paste
End Sub

Листинг 1: html, txt

Метод Paste позволяет «вклеить» содержимое буфера в область, заданную объектами Range и Selection. Эта операция опасна, так как происходит замена, а не добавление текста. Поэтому обычно метод Paste применяется к объектам Range и Selection, стянутым в точку вставки. В выполнении этого метода есть нюансы. У объекта Range содержимое буфера включается в его область, Объект Selection остается точкой вставки, расположенной после текста, добавленного из буфера.

Заметьте, в буфер можно копировать не только текст. В нашем следующем примере в буфер копируется рисунок, являющийся элементом коллекции TableOfFiguress. Напомню, что элементы этой коллекции вставляются аналогично символам текста и являются частью абзаца. В тестовом документе DocOne, с которым я работаю, в начало текста вставлен рисунок мышки. Я буду работать с первым абзацем этого текста, содержащим этот рисунок, как с обычным текстом, выделю рисунок, помещу его в буфер, а затем приклею в другом месте текста. Вот код соответствующей процедуры:

Public Sub CopyImage()
   'Копирование рисунка через буфер
   Dim MyRange As Range
   Set MyRange = Documents("DocOne").Paragraphs(1).Range
   With MyRange
      'Первый абзац этого документа содержит рисунок
      ' - элемент коллекции TableOfFiguress.Выделяем рисунок
      .MoveEnd Unit:=wdCharacter, Count:=-7
      .Select
      .Copy
   End With
      Set MyRange = ActiveDocument.Paragraphs(6).Range
      MyRange.Select
      Selection.Collapse Direction:=wdCollapseEnd
      Selection.Paste
   
End Sub

Листинг 1: html, txt

Иногда в буфер копируют формат текста. Этим занимается метод CopyFormat, копирующий формат по первому символу объекта Selection. Если этот символ — метка абзаца, копируется формат абзаца. Методом CopyFormat обладает только объект Selection.

Метод PasteFormat применяет форматирование, хранящееся в буфере к объекту Selection.

Метод PasteSpecial позволяет явно управлять форматированием в момент вставки объекта из буфера.

Назад Оглавление Вперёд

Понравилась статья? Поделить с друзьями:
  • Word value in excel
  • Word va excel dasturida ishlash
  • Word utilities для microsoft word
  • Word ustanovka dlya kompyuter
  • Word using the suffix ive