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]
Здравствуйте дорогие читатели блога scriptcoding.ru. Сегодня мы рассмотрим работу с классом Range, который относится к объектном модели Word. Данный класс отвечает за работу с текстом в ворде, а точнее, за его выбор.
В отличии от Selection, Range позволяет не выделить, а выбрать заданный диапазон текста в ворде. Использовать Range более выгодно, чем Selection, так как получить выбор можно только программно, это работает нам на руку, так как пользователь не сможет повлиять на работу макроса или программного кода. Поясню: допустим, мы хотим обработать текст в ворде с помощью объекта Selection, выделив нужный диапазон. Если пользователь во время обработки щелкнет мышью и снимет выделение, то наш макрос потерпит поражение. В случае с Range такой неприятности не произойдет, поэтому и рекомендуется использовать вместо Selection.
Получить доступ к объекту можно несколькими способами:
Одноименный метод объекта Document – данный метод принимает два необязательных параметра, которые задают начальное и конечное значение выбора при работе с текстом в Word. Если вызвать метод без параметров, то будет выбрано содержимое всего документа, например:
' Выбираем весь текст set oRange = oDoc(1).Range() 'Делаем шрифт жирным oRange.Bold = true
Или такой вариант:
'Выбираем первые 10 символов
set oRange = oDoc(1).Range(0,10)
Одноименное свойство – данное свойство предусмотрено для большинства классов Word (Bookmark, Selection, Table, Row, Cell, Paragraph и так далее). В данном случае мы получаем Range для заданного класса, автоматически произойдет выбор содержимого данного класса (абзац, выделение, закладка и так далее).
Метод SetRange() – Данный метод предоставляет сам объект Range, и он позволяет переопределить выбор текста в ворде, например:
set oRange1 = oDoc(1).Range() oRange1.SetRange 1,10 oRange1.Bold = true
Содержание
- Класс Range – выбираем текст в ворде
- Свойства – работа с текстом в ворде
- Методы – работа с текстом в Word
Класс Range – выбираем текст в ворде
Свойства – работа с текстом в ворде
Свойства, которые позволяет задать или получить значение константы:
Case– Регистр текста в ворд, константа WdCharacterCase:
- wdNextCase — -1 – Как в предложении
- wdLowerCase — 0 — Нижний регистр
- wdUpperCase — 1 — Верхний регистр
- wdTitleWord — 2 – Начало слова с заглавной буквы
- wdTitleSentence — 4 — в режиме ввода предложения
- wdToggleCase — 5 – Инвертировать регистр
CharacterWidth — Ширина символов, константа WdCharacterWidth:
- wdWidthFullWidth — 7 – Полная ширина.
- wdWidthHalfWidth — 6 – Половина ширины (нормальный режим).
HorizontalInVertical– Расположение текста в ворде, константа WdHorizontalInVerticalType:
- wdHorizontalInVerticalNone — 0 – Форматирование отсутствует
- wdHorizontalInVerticalFitInLine — 1 – Горизонтальное направление
- wdHorizontalInVerticalResizeLine — 2 – Вертикальное направление
Orientation— Направление ворд текста, константа WdTextOrientation:
- wdTextOrientationHorizontal — 0 – Горизонтально, по умолчанию.
- wdTextOrientationVerticalFarEast — 1 – Вертикально вниз от верхней части, справа налево.
- wdTextOrientationUpward — 2 — Вверх под углом.
- wdTextOrientationDownward — 3 – Вниз под углом.
- wdTextOrientationHorizontalRotatedFarEast — 4 — Горизонтально, но справа налево (только для языков с данным типом письма).
- wdTextOrientationVertical — 5 — Вертикально вниз от верхней части, слева направо.
HighlightColorIndex– Цвет выделения текста в ворде, константа WdColorIndex.
LanguageIDOther– Язык текста в ворд, константа, WdLanguageID.
Style– Стиль, константа WdBuiltinStyle.
Underline– Тип подчеркивания, константа WdUnderline.
Свойства, которые позволяют задать или получить логическое значение:
Bold– Делает шрифт жирным (true).
Italic— Делает шрифт курсивом (true).
GrammarChecked– Проверка грамматики.
LanguageDetected– Определение языка.
Прочие свойства (чтение и запись), только последнее доступно только для чтения.
Startи End– Начальная и конечная позиция для выбора.
FitTextWidth— Ширина текста в текущих единицах измерения.
ID— Имя идентификатора (строковое значение) для указанного диапазона.
Text– Позволяет вставить (в место, где находится курсор), заменить (выбранную область), или получить текст в ворде для заданного диапазона.
Information(type) — Информация об указанном диапазоне (параметр type содержит значение константы WdInformation. Только чтение.
Методы – работа с текстом в Word
CheckGrammar() — Начинает проверку орфографии и грамматики для указанного диапазона.
Set Range2 = Documents("MyDocument.doc").Sections(2).Range Range2.CheckGrammar
CheckSynonyms() — Отображает диалоговое окно «Тезаурус«.
Collapse(Direction) — Убирает выделение.
Direction – Дополнительный параметр, который задает направление от позиции курсора. Может быть одним из следующих значений константы WdCollapseDirection: wdCollapseEnd — 0 или wdCollapseStart — 1. Значение по умолчанию wdCollapseStart.
ComputeStatistics(Statistic) – Позволяет получить статистику для заданного выбора. Параметр Statistic содержит значения константы WdStatistic.
Copy(), Delete(), Cut() – Копирование, удаление и вырезание выбранного диапазона.
Paste() – Вставка содержимого буфера обмена.
CopyAsPicture() – Копирование текста в ворде как изображения.
Select() – Выделение текущего выбора.
SetRange(Start, End) – Позволяет задать начальную и конечную позицию для выбора, вернет новый объект Range.
Relocate(Direction) — Переставляет местами абзацы в выбранном диапазоне.
Direction – Обязательный параметр, который задает направление, содержит значение константы WdRelocate:
- wdRelocateDown — 1 — Ниже следующего видимого абзаца.
- wdRelocateUp — 0 — Выше предыдущего видимого абзаца.
Методы с префиксом Insert…и Move… и метод ConvertToTable() используются также классом Selection, поэтому я не стал их описывать, просто ознакомьтесь со статьей «Объект Word Selection — выделение фрагмента текста в ворде, методы #1»
Ниже я привел два примера программного кода на языке VBScript и JScript, в них я просто выбираю каждый символ в тексте и задаю для него цвет выделения. Работа с текстами в Word. Причем так, что бы цвета периодически менялись.
Программный код на языке VBSCRIPT:
' ---------------------------------------------------------------------------- ' Работа с текстом в ворде ' Выделение разными цветами ' Range1.vbs ' ---------------------------------------------------------------------------- Option Explicit dim oWord, oDoc, oSel, i, oPars, MyText, oRange, j Set oWord = CreateObject("Word.Application") Set oDoc = oWord.Documents oDoc.Add() Set oSel = oWord.Selection Set oPars = oSel.Paragraphs oWord.Visible = True MyText = "Работа с текстом в Word " ' Вставляем текст For i=0 to 4 oSel.TypeText MyText & MyText & MyText & MyText & MyText & MyText & MyText oSel.TypeParagraph Next ' Создаем ссылку ' Заодно выбираем весь текст в ворде set oRange = oDoc(1).Range() i = 1:j = 0 ' Обрабатываем каждый символ Do While i <= oRange.End With oRange ' выбираем один символ .SetRange i, i+1 ' если выбран последний цвет if j = 17 then j = 0 ' Меняем цвет выделения .HighlightColorIndex = j j = j + 1 else .HighlightColorIndex = j j = j + 1 end if i = i + 1 End With Loop
Программный код на языке JSCRIPT:
// ---------------------------------------------------------------------------- // Работа с текстом в ворде // Выделение разными цветами // Range1.js // ---------------------------------------------------------------------------- var oWord1, oDoc1, oSel1, oPars1, MyText1 = "Работа с текстом в Word. ", oRange1; oWord1 = WScript.CreateObject("Word.Application"); oDoc1 = oWord1.Documents; oDoc1.Add(); oSel1 = oWord1.Selection; oPars1 = oSel1.Paragraphs; oWord1.Visible = true; // Вставляем текст for (i=0; i<=4; i++){ oSel1.TypeText(MyText1 + MyText1 + MyText1 + MyText1 + MyText1 + MyText1 + MyText1); oSel1.TypeParagraph(); } // Создаем ссылку // Заодно выбираем весь текст в ворде oRange1 = oDoc1(1).Range(); var i = 1, j = 0; // Обрабатываем каждый символ while (i <= oRange1.End){ with(oRange1){ // выбираем один символ SetRange(i, i+1); // если выбран последний цвет if (j == 17){ j = 0; // Меняем цвет выделения HighlightColorIndex = j; j++; }else{ HighlightColorIndex = j; j ++; } i++ } }
Хорошо, с программированием закончили, теперь можно дать некоторые пояснения. И так, оба примера работают с текстом в Word одинаково. Имена переменных практически идентичны, только для JSCRIPT я к имени переменных добавил 1. В самом начале происходит подключение основных классов для доступа к приложению Microsoft Word, создание нового документа — «Коллекция Documents«, делаем документ видимым. Далее в цикле FOR — «Урок 9 по JScript — оператор цикла for» и «Урок 6 по VBScript: Циклы for…next и for each…next» происходит работа с текстом в ворд, а именно – добавление несколько раз содержимого переменной MyText.
Переменная oRange будет содержать ссылку н6а класс, используя цикл WHILE — «Урок 7 по VBScript: Циклы do…loop и while…wend» и «Урок 10 по JScript: Цикл while и do…while«, мы начинаем обрабатывать каждый символ и менять его цвет, естественно, что количество возможных цветов ограничено. Поэтому нам приходится дополнительно добавить переменные i и j. Ну и все, результат работы можно увидеть на рисунке выше.
Последнее время я часто сталкиваюсь с его использованием. На изученных мною ресурсах, посвященных 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 |
Таким образом можно, например, сохранить каждую страницу документа в файл. На одном форуме я выкладывал пример такого макроса, нашлись даже добровольцы, которые довели его почти до совершенства.
Visual Basic for Applications is the language behind the Office apps that allows you to automate tasks. But using VBA in Word has its challenges. The first is moving around in a document because of all the different types of content: Text, pictures, tables and so on. In this tutorial, I’ll show you two simple VBA procedures for navigating. One identifies the beginning of a Word document, and the other identifies the document’s end.
I’m using Microsoft 365 on a Windows 10 64-bit system, but you can use an earlier version. You may access the demo files here. Word for the web doesn’t support VBA.
SEE: Google Workspace vs. Microsoft 365: A side-by-side analysis w/checklist (TechRepublic Premium)
About Microsoft Word VBA’s ActiveDocument
The main VBA component that we’ll rely on in both procedures is the ActiveDocument property, which returns a Document object that represents the active document. In other words, this opens the document, as a whole. You won’t need this for every VBA procedure in Word, but you will need it when you need to reference “parts” of the document.
If no Word document is open, this property returns an error. If you’re using this property from inside Excel or PowerPoint, you should include error-handling for this situation.
This property uses the following form:
expression.ActiveDocument
where expression
is a variable that represents the Application object (Word). Fortunately, in Word, this is implicitly implied.
The next piece of VBA we’ll use is the Range method, which uses the form
expression.Range(start, end)
to return a Range object. We’ll use this method to identify an area of the document.
There’s no method that says “go to the beginning,” or “go to the end,” so we’ll use the start and end arguments to identify both. Both arguments are optional, and as you might suspect, start
identifies the first character position and end
identifies the last character position.
Now, let’s move on to the actual VBA procedures.
How to use VBA to find the beginning of a Word document
Moving the cursor to the beginning of a Word document using VBA is amazingly simple. Listing A shows the procedure. First, the procedure declares and defines a range object, using 0s to identify the beginning of the document. Two 0s will place the cursor before any content in the active document. The second line adds a bit of text and the vbNewLine
constant adds a new line.
Listing A
Sub GoToStart()
'Move cursor to the beginning of the active document.
'Add a short text phrase to show it worked.
Dim rBegin As Range
Set rBegin = ActiveDocument.Range(0, 0)
rBegin.Text = "This is the beginning of this document." & vbNewLine
End Sub
Now let’s look at the second procedure that moves the cursor to the end of a document.
How to use VBA to find the end of a Word document
As mentioned, there is no method that says “go to the end,” so we need to force the issue by finding the last character. It is a bit more complex, but not difficult, as shown in Listing B. This procedure works similar to the first, but it enters the text at the end of the document, which it finds by using the Last property of the Characters object.
This time we positioned the vbNewLine
constant before the text.
Listing B
Sub GoToEnd()
'Move cursor to the end of the active document.
'Add a short text phrase to show it worked.
Dim rEnd As Range
Set rEnd = ActiveDocument.Range.Characters.Last
rEnd.Text = vbNewLine & "This is the end of this document."
End Sub
How to enter and run the VBA procedures into a Word document
Now it’s time to enter both procedures for use in a Word document. I’m using a short two-page Word document, shown in Figure A, with a variety of content saved as a macro-enabled Word file. If you are using a ribbon version, you must save the Word document as a macro-enabled file to run VBA. If you’re working in the menu version, you can skip this step.
Figure A
To enter the VBA procedures, press Alt + F11 to open the Visual Basic Editor (VBE). In the Project Explorer to the left, select ThisDocument. You can enter the code manually or import the downloadable .cls file. In addition, the procedure is in the downloadable .docm and .doc files. If you enter the code manually, don’t paste from this web page. Instead, copy the code into a text editor and then paste that code into the ThisDocument module. Doing so will remove any phantom web characters that might otherwise cause errors.
Now let’s run the procedures as follows:
- Click the Developer tab.
- Choose Macros in the Code group.
- In the resulting dialog, choose GoToStart (Figure B).
- Click Run.
As you can see in Figure C, the procedure inserts text and a line break at the beginning of the Word document. Now let’s repeat this process but choose GoToEnd (Figure B). This procedure inserts a line break and a bit of text to the end of the Word document, as you can see in Figure D.
Figure B
Figure C
Figure D
One thing you might notice is that both of the inserted sentences use different formats. These sentences, like any other, will use the format in place. This is worth remembering if you want inserted text to use a specific format instead.
Most likely, you won’t want to work through all those steps to run this macro. I recommend that you add it to the Quick Access Toolbar or a custom group. If you need help with that, read How to add Office macros to the QAT toolbar for quick access.
Stay tuned
Both VBA procedures are simple — both the procedures themselves and the tasks they complete. The goal is to show you how to navigate to both spots using VBA. Over the next few months, I’ll devote a few articles to more navigational VBA in Microsoft Word documents.
Редактирование документов Word из кода VBA Excel. Добавление и форматирование текста. Объект Word.Range, свойство Text, методы InsertAfter и InsertBefore.
Работа с Word из кода VBA Excel
Часть 3. Редактирование документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Добавление текста в новый документ
Основные объекты, использующиеся в VBA Word для определения места вставки, добавления и форматирования текста – это Selection (выделение), Range (диапазон) и Bookmark (закладка).
Selection и Range позволяют заполнять текстом новые документы или редактировать существующие. Закладки можно использовать для вставки изменяемых реквизитов в шаблоны различных документов: договоры, акты, справки.
Объект Range имеет преимущество перед объектом Selection, так как он может быть создан только программно и не зависит от действий пользователя. Если для вставки и форматирования текста будет использоваться объект Selection, а пользователь во время работы программы просто поставит курсор в другое место документа, результат будет непредсказуем.
Word.Range кардинально отличается от объекта Range в Excel. В приложении Word он представляет из себя набор из одного или множества символов. А также он может вообще не содержать ни одного символа, а быть указателем ввода текста (виртуальным курсором).
Объект Range возвращается свойством Range других объектов приложения Word: Document, Selection, Bookmark, Paragraph, Cell (объект Table).
Вставка текста без форматирования
Если текст вставляется без форматирования, достаточно одной строки кода (myDocument – это переменная):
- Вставка текста с заменой имеющегося:
myDocument.Range.Text = "Вставляемый текст"
- Добавление текста после имеющегося:
myDocument.Range.InsertAfter "Добавляемый текст"
- Добавление текста перед имеющимся:
myDocument.Range.InsertBefore "Добавляемый текст"
Методами InsertAfter и InsertBefore можно вставить текст и на пустую страницу, также, как с помощью свойства Text. Перейти на новый абзац и начать предложение с красной строки можно с помощью ключевых слов vbCr (vbNewLine, vbCrLf) и vbTab.
Вставка текста с форматированием
Для форматирования отдельных участков текста необходимо указать диапазон символов, входящих в этот участок. Здесь нам также поможет объект Range, которому можно задать любой набор символов, содержащихся в документе Word.
Синтаксис присвоения диапазона символов объекту Range:
myDocument.Range(Start:=n, End:=m) ‘или без ключевых слов Start и End myDocument.Range(n, m) |
- myDocument – переменная;
- n – номер точки перед начальным символом;
- m – номер точки после конечного символа.
Счет точек вставки начинается с нуля. Знаки переноса строки, возврата каретки и табуляции учитываются как отдельные символы. 0 – это для объекта Word.Range виртуальная точка вставки на пустом документе, 1 – точка между первым и вторым символом, 2 – точка между вторым и третьим символом и т.д.
На пустом документе объекту Range можно присвоить только виртуальную точку вставки:
myDocument.Range(Start:=0, End:=0)
Первый символ в документе с текстом:
myDocument.Range(Start:=0, End:=1)
Диапазон с 11 по 20 символ:
myDocument.Range(Start:=10, End:=20)
Реальная точка вставки (курсор) принадлежит объекту Selection, который создается вручную или программно с помощью метода Select.
Вставка курсора в начало документа:
myDocument.Range(Start:=0, End:=0).Select
Эта строка вставит курсор между пятым и шестым символами:
myDocument.Range(Start:=5, End:=5).Select
Вставка курсора в конец документа:
myDocument.Range(.Range.Characters.Count - 1, .Range.Characters.Count - 1).Select
Ссылку на объект Range можно присвоить переменной, но при форматировании ее придется каждый раз переопределять и код получится длиннее. Пример присвоения ссылки объектной переменной:
Dim myRange As Word.Range Set myRange = myDocument.Range(Start:=0, End:=20) |
Для Range(Start:=0, End:=20)
в документе должно быть как минимум 20 символов.
Однострочные примеры редактирования и форматирования текста
Вставка дополнительного текста внутри имеющегося после заданной точки:
myDocument.Range(Start:=10, End:=10).InsertAfter "Вставляемый текст"
Новый абзац с красной строки (предыдущая строка должна заканчиваться символом возврата каретки или переноса строки):
myDocument.Range.InsertAfter vbTab & "Красная строка"
Присвоение шрифту заданного диапазона зеленого цвета:
myDocument.Range(Start:=10, End:=65).Font.ColorIndex = wdGreen
Меняем обычное начертание на курсив:
myDocument.Range(Start:=10, End:=65).Font.Italic = True
Указываем размер шрифта:
myDocument.Range(Start:=10, End:=65).Font.Size = 22
Применение стандартных стилей:
myDocument.Range(Start:=0, End:=16).Style = "Заголовок 1"
Если вас заинтересуют другие команды форматирования текста, запишите их макрорекордером в VBA Word и примените к объекту Range.
Пример 1
Добавление текста в новый документ без форматирования:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
Sub Primer1() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument .Range.Text = «Заголовок по центру» & vbCr .Range(Start:=0, End:=19).ParagraphFormat.Alignment _ = wdAlignParagraphCenter .Range.InsertAfter _ vbTab & «Первый абзац с красной строки» & vbCr & _ «Второй абзац не с красной строки» & vbCr & _ vbTab & «Третий абзац с красной строки» End With Set myDocument = Nothing Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Пример 2
Добавление текста в новый документ с форматированием:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
Sub Primer2() On Error GoTo Instr Dim myWord As New Word.Application, _ myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True With myDocument .Range.Text = «Заголовок по центру» & vbCr .Range(Start:=0, End:=19).Style = «Заголовок» .Range(Start:=0, End:=19).ParagraphFormat.Alignment _ = wdAlignParagraphCenter .Range.InsertAfter «Заголовок 1 не по центру» & vbCr .Range(Start:=20, End:=44).Style = «Заголовок 1» .Range.InsertAfter vbTab & «Шрифт по умолчанию « _ & «с красной строки» & vbCr .Range.InsertAfter «Зеленый курсив, размер 20» .Range(Start:=82, End:=107).Font.Italic = True .Range(Start:=82, End:=107).Font.Size = 20 .Range(Start:=82, End:=107).Font.ColorIndex = wdGreen End With Set myDocument = Nothing Set myWord = Nothing Exit Sub Instr: If Err.Description <> «» Then MsgBox «Произошла ошибка: « & Err.Description End If If Not myWord Is Nothing Then myWord.Quit Set myDocument = Nothing Set myWord = Nothing End If End Sub |
Вы можете запустить эти примеры в редакторе VBA Excel на своем компьютере и посмотреть результаты.