Перейти к содержимому

VBA Excel. Редактирование документов Word

Редактирование документов Word из кода VBA Excel. Добавление и форматирование текста. Объект Word.Range, свойство Text, методы InsertAfter и InsertBefore.

Работа с Word из кода VBA Excel
Часть 3. Редактирование документов Word
[Часть 1] [Часть 2] [Часть 3]

  1. Добавление текста в новый документ
  2. Примеры редактирования документов Word

Добавление текста в новый документ

Основные объекты, использующиеся в 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)
  • 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

Ссылку на объект 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.

Примеры редактирования документов Word

Пример 1
Добавление текста в новый документ без форматирования:

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
Добавление текста в новый документ с форматированием:

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 на своем компьютере и посмотреть результаты.

Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.

Добавить комментарий

Ваш комментарий будет опубликован после прохождения обязательной модерации. Исходящие ссылки не допускаются. Время модерации составит от нескольких минут до нескольких часов в зависимости от времени суток и занятости модератора. При добавлении в комментарий кода VBA Excel, вставьте перед его началом тег [vb] и по окончании кода - [/vb].