Word cell range text

word vba tutorial

Welcome to the Word VBA Tutorial. VBA is a great tool not only to be leveraged in MS Excel. Often it is worth to save some time doing repeatable tasks by adopting some VBA macros in Word or PowerPoint too. Today I wanted to focus a little bit on starting you off in Word VBA macro programming.

vba word tutorialWhen moving to macro programming in Word VBA you will stumble upon issues you would normally not expect in Excel. Lets take the example of moving around the Word file – in Excel you have spreadsheets which are easy to navigate around. In Word, however, you have a lot of different content e.g. text, objects like images and charts, tables etc. Navigating around Word file in VBA is the greatest challenge you will face. Today I would like to focus on that and other frequently used features in Word VBA. So let’s kick off this Word VBA Tutorial.

Starting your journey with programming in Visual Basic for Applications (VBA)? Start with my VBA Tutorial.

Word VBA is identical to Excel VBA – be sure to leverage the VBA Cheat Sheet

VBA Word Navigating

Let’s start with adding content to the most common places the start and end of a Word document in VBA. Know if you Google for this you will get tons of non-sense methods of navigating around Word files. I was truly amazed at how poorly it is documented.

Beginning and End of the Word Document

Go to the Beginning of a Word Document:

'Start - add text to the beginning of the Word Document
Dim startMark As Range
Set startMark = ActiveDocument.Range(0, 0)
startMark.Text = "This is the start of the document"

Go to the End of a Word Document:

'End - add text to the end of the Word Document
Dim endMark As Range
Set endMark = ActiveDocument.Range(Len(ActiveDocument.Range))
endMark.Text = "This is the end of the document"

Finding and replacing text in a Word Document with VBA

Finding and replacing text are basic functions that you will probably need to leverage every now and then.

'Find and print text in MsgBox
Dim selectText As Range
Set selectText = ActiveDocument.Content
selectText.Find.Execute "Hello"
If selectText.Find.Found Then
  MsgBox selectText.Text
End If
'Find and replace all instances of a specific text
Dim replaceText As Range
Set replaceText = ActiveDocument.Content
replaceText.Find.Execute FindText:="Hello", ReplaceWith:="Goodbye", Replace:=wdReplaceAll

VBA Word Text formatting

One of the first things you would want to do is probably text formatting in Word VBA.

Let’s start by adding some text to our document:

'Select the beginning of the document
ActiveDocument.Range(0).Select
'Type "Hello World!"
Selection.TypeText Text:="Hello World!"

Bold & Italic

To change the font weight to bold see below:

'Select the word "Hello"
ActiveDocument.Range(0, 5).Select

'Toggle the bold property
Selection.Font.Bold = wdToggle

To change the text decoration to italic see below:

'Select the word "World"
ActiveDocument.Range(0, 5).Select
'Toggle the bold property
Selection.Font.Bold = wdToggle

Below the final result of the code above:
Word VBA Tutorial: Bold and Italic

Font size and name

Using the “Hello World!” example above we can similarly change the text font name and font size as shown below:

'Change font size
Selection.Font.Size = 20 'Size: 20
Selection.Font.Grow 'Size: 22
Selection.Font.Shrink 'Size: 20
'Change font name to "Aharoni"
Selection.Font.Name = "Aharoni"

VBA Word Tables

When editing Word files you might want to leverage tables as it is much easier to navigate around them in an automated way. My approach is to insert/modify tables in Word without and borders (invisible). This way you can guarantee a consistent and easy to navigate structure in Word. Let’s go through some of the basic functions around tables.

Add a table

Let’s add a table to the beginning of the Word document:

 Dim begin As Range
 Set startMark = ActiveDocument.Range(0, 0)
 'range as Range, NumRows as Long, NumColumns as Long
 Call ActiveDocument.Tables.Add(startMark, 3, 6) 'add to beginning of doc, 3 rows, 6 cols

Edit cell text

'Modify cell (1,3) to "Hello World!"
With ActiveDocument.Tables(1)
        .Cell(1, 3).Range.Text = "Hello World!"
End With

Working on rows and columns

With ActiveDocument.Tables(1)
        ' Modify height of row 1
        .Rows(1).Height = CentimetersToPoints(0.65)
        ' Modify width of column 1
        .Columns(1).Width = CentimetersToPoints(2.54)
        'Merge cell (1,3) with cell (1,4) - cells must be next to each other
        .Cell(1, 3).Merge .Cell(1, 4)
End With

Formatting borders

'Modify row 1 border, single, black and 100pt
 With ActiveDocument.Tables(1).Rows(3).Borders(wdBorderBottom)
        .LineStyle = wdLineStyleSingle
        .LineWidth = wdLineWidth100pt
        .Color = wdColorBlack
End With

In progress…

Здравствуйте дорогие читатели блога 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

Содержание

  1. Класс Range – выбираем текст в ворде
  2. Свойства – работа с текстом в ворде
  3. Методы – работа с текстом в 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.

работаем с текстами в word

Свойства, которые позволяют задать или получить логическое значение:

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. Ну и все, результат работы можно увидеть на рисунке выше.

I’d go as follows:

Dim BMRange As Range
Dim tbl1 As Table

With ActiveDocument
    Set tbl1 = .Tables(1)
    Set BMRange = .Range(Start:=tbl1.Cell(2, 2).Range.Start, _
                         End:=tbl1.Cell(2, 2).Range.End)
    BMRange.MoveEnd Unit:=wdCharacter, count:=-1
    .Bookmarks.Add name:="ExampleBookmark", Range:=BMRange
End With

With tbl1.Cell(2, 3).Range
    .Collapse (wdCollapseStart)
    .InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _
                          wdContentText, ReferenceItem:="ExampleBookmark", InsertAsHyperlink:=True, _
                          IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
End With

or, with a different stylistic choice:

Dim BMRange As Range

With ActiveDocument
    With .Tables(1)
        Set BMRange = .Parent.Range(Start:=.Cell(2, 2).Range.Start, _
                             End:=.Cell(2, 2).Range.End)
    End With

    BMRange.MoveEnd Unit:=wdCharacter, count:=-1    
    .Bookmarks.Add name:="ExampleBookmark", Range:=BMRange

    With .Tables(1).Cell(2, 3).Range
        .Collapse (wdCollapseStart)
        .InsertCrossReference ReferenceType:="Bookmark", ReferenceKind:= _
                              wdContentText, ReferenceItem:="ExampleBookmark", InsertAsHyperlink:=True, _
                              IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
    End With
End With

На одном из проектов столкнулась с ситуацией, когда построение отчета, в котором заполняются таблицы, занимало слишком много времен. Проанализировав код расчета отчета, поняла, что очень много времени тратится на заполнение таблиц с помощью функции
ListMergeTableWord, таким образом, я попыталась исключить использование данной функции в расчете. Решением данной ситуации было внесение данных в таблицы Excel, а затем вставка заполненных таблиц Excel в документ отчета и дальнейшем форматированием
документа с помощью IS-Builder, таким образом, удалось сократить время построения отчета в несколько раз. Это скорее не единичный случай использования объектной модели MS Office для решения задач для генерации документов, а постоянно выполняемая задача.

Например, в рамках другого проекта была поставлена одна из задач: формировать версии документов без возможности их редактирования. Для решения данной задачи был выбран вариант преобразования документов в формате docxls в формат pdf, хотя, возможен и другой
формат, в который возможно преобразование документа в MS Office. Существует 2 способа преобразования документа: 1) с помощью службы преобразования; 2) с помощью объектной модели MS Office (с 2007 версии). Мною был выбран 2 способ так, как исключается промежуточное
звено (служба преобразования), соответственно уменьшается нагрузка на сервер, увеличивается скорость преобразования и нет необходимости настраивать службу. Ниже будет приведен способ преобразования документа формата doc в формат pdf (35-й пункт).

В данной статье хотелось описать наиболее востребованные способы форматирования документа в формате doc с помощью

IS
Builder.

Word = CreateObject("Word.Application") 
Doc = Word.Documents.Open(Path)

где Path - путь к документу, с которым работаете.
  1. Установка единицы измерения размера таблицы
Doc.Tables(1).PreferredWidthType = 2

Единица измерения

Константа в Word

Значение в ISBL

Сантиметры

wdPreferredWidthPoints

3

Проценты

wdPreferredWidthPercent

2

  1. Установка ширины таблицы
Doc.Tables(1).PreferredWidth = 100 // ширина таблицы в процентах
Doc.Tables(1).PreferredWidth = Word.CentimetersToPoints(17.5) // ширина таблицы в сантиметрах
  1. Автоподбор размера ячейки таблицы
Doc.Tables(1).AutoFitBehavior(2)

Режим выравнивания

Константа в Word

Значение в ISBL

Фиксированная ширина

wdAutoFitFixed

0

По содержимому

wdAutoFitContent

1

По ширине окна

wdAutoFitWindow

2

  1. Установка высоты ячеек
Doc.Tables(1).Rows.HeightRule = HeightRule   // указывает на способ изменения высоты
Doc.Tables(1).Rows.Height = RowHeigh         // RowHeight указывает на новую высоту строки в пунктах.

Значение константы HeightRule

Способ изменения высоты

Константа в Word

Значение в ISBL

Размер, указанный в параметре RowHeigh, является точным

wdRowHeightAuto

2

Размер, указанный в параметре RowHeigh, является минимальным

wdRowHeightAtLeast

1

Автоматический подбор высоты строк (параметр RowHeigh игнорируется)

wdRowHeightExactly

0

  1. Установка интервала абзаца (перед и после) в таблице
Doc.Tables(1).Range.ParagraphFormat.SpaceBefore = 6  //интервал перед
Doc.Tables(1).Range.ParagraphFormat.SpaceAfter = 6   //интервал после

Единица измерения интервала пт.
  1. Установка интервалов перед и после абзаца
Doc.Paragraphs(1).Format.SpaceBefore = 12 // интервал перед
Doc.Paragraphs(1).Format.SpaceAfter = 12  // интервал после
  1. Межстрочный интервал
Doc.Paragraphs(1).Format.LineSpacingRule = 0.5 // одинарный интервал

1 – полуторный интервал и 1.5 – двойной интервал.
  1. Установка стиля таблицы
Doc.Tables(1).Style = ИмяСтиляТаблицы
  1. Установка отступа слева 
Doc.Tables(1).Rows.LeftIndent = 0
  1. Абзацный отступ (красная строка) абзаца
Doc.Paragraphs(1).Format.FirstLineIndent = Значение в пунктах

Для перевода сантиметров в пункты можно воспользоваться функцией
CentimetersToPoints, тогда абзацный отступ в 1,5 см можно задать следующим образом:

Doc.Paragraphs(1).Format.FirstLineIndent = Word.CentimetersToPoints(1.5)
  1. Установка левой и правой границ текста абзаца:
Doc.Paragraphs(1).Format.LeftIndent = 10    // отступ слева
Doc.Paragraphs(1).Format.RightIndent = 10   // отступ справа
  1. Установка значений полей ячеек по умолчанию
Doc.Tables(1).TopPadding = 0     // верхнее
Doc.Tables(1).BottomPadding = 0  // нижнее
Doc.Tables(1).LeftPadding = 0    // левое      
Doc.Tables(1).RightPadding = 0   // правое
  1. Выравнивание текста в таблице по горизонтали
Doc.Tables(1).Range.ParagraphFormat.Alignment = 3  // по ширине

Режим выравнивания

Константа в Word

Значение в ISBL

По левому краю

wdAlignParagraphLeft

0

По центру

wdAlignParagraphCenter

1

По правому краю

wdAlignParagraphRight

2

По ширине

wdAlignParagraphJustify

3

  1. Выравнивание текстового абзаца:
Doc.Paragraphs(1).Format.Alignment = 0  // выравнивание по левому краю

Значения констант выравнивания такие же как в предыдущем пункте.

  1. Выравнивание текста в ячейке по вертикали
Doc.Tables(1).Rows(НомерСтроки).Cells(НомерСтолбца).VerticalAlignment = 1

Режим выравнивания

Константа в Word

Значение в ISBL

По верхнему краю

wdCellAlignVerticalTop

0

По центру

wdCellAlignVerticalCenter

1

По нижнему краю

wdCellAlignVerticalBottom

3

  1. Установка размера шрифта таблицы
Doc.Tables(1).Range.Font.Size = 7
  1. Установка цвета текста в ячейке
Doc.Tables(1).Cell(НомерСтроки; НомерСтолбца).Range.Font.Color = 255 
  1. Выделение всего текста таблицы (жирным, курсивом, подчеркиванием)
Doc.Tables(1).Range.Font.Bold = True          // жирным
Doc.Tables(1).Range.Font.Italic = True        // курсивом
Doc.Tables(1).Range.Font.Underline  = True    // подчеркивание
  1. Установка цвета подчеркивания
Doc.Tables(1).Cell(НомерСтроки; НомерСтолбца).Range.Font.UnderlineColor = 255
  1. Установка темы шрифта таблицы
Doc.Tables(1).Range.Font.Name = "Arial"
  1. Объединение ячеек
// объединение первой и второй ячеек первой строки
Cell = Doc.Tables(1).Cell(1; 1)
Cell.Merge(Doc.Tables(1).Cell(1; 2))
  1. Вставка Excel таблицы
    в Word
SelectionWord = Doc.Paragraphs(Paragraph).Range
SelectionWord.PasteExcelTable(True; False; False)

 Paragraph
– номер параграфа, куда будет вставлена таблица из Excel.

  1. Разрыв связь
Doc.Fields.Unlink  
  1. Удаление абзаца
Doc.Paragraphs(Paragraph).Range.Delete

 Paragraph
– номер параграфа, который нужно удалить.

  1. Удаляем строку в таблице
Doc.Tables(1).Rows(НомерСтроки).Select
Doc.Tables(1).Rows(НомерСтроки).Delete
  1. Установка границ таблицы
Table = Doc.Tables(1)
Table.Borders(WdBorderType).LineStyle = 4

Расположение линии

Значение в Word

Константа в ISBL

Линия, обрамляющая диапазон сверху

wdBorderTop

-1

Линия, обрамляющая диапазон слева

wdBorderLeft

-2

Линия, обрамляющая диапазон снизу

wdBorderBottom

-3

Линия, обрамляющая диапазон справа

wdBorderRight

-4

Все горизонтальные линии внутри диапазона

wdBorderHorizontal

-5

Все вертикальные линии внутри диапазона

wdBorderVertical

-6

Линия по диагонали сверху – вниз

wdBorderDiagonalDown

-7

Линия по диагонали снизу – вверх

wdBorderDiagonalUp

-8

  1. Закрасить всю таблицу
    цветом
Doc.Tables(1).Shading.BackgroundPatternColor = 255 // заливка красным цветом
  1. Закрасить ячейку цветом
Cell = Doc.Tables(1).Cell(1; 1)
Cell.Shading.BackgroundPatternColor = -687800525 // заливка желтым цветом
  1. Установка ориентации страницы
Doc.Application.Selection.PageSetup.Orientation = 1 // альбомная
Doc.Application.Selection.PageSetup.Orientation = 0 // книжная
  1. Установка полей страницы
Word.Application.Selection.PageSetup.LeftMargin = Word.CentimetersToPoints(2)    // левое поле
Word.Application.Selection.PageSetup.RightMargin = Word.CentimetersToPoints(2)   // правое поле
Word.Application.Selection.PageSetup.TopMargin = Word.CentimetersToPoints(2)     // верхнее поле
Word.Application.Selection.PageSetup.BottomMargin = Word.CentimetersToPoints(2)  // нижнее поле 
  1. Добавление таблицы в документ
Doc.Tables.Add(Doc.Paragraphs(1).Range; 3; 5) // добавление таблицы из 5 столбцов и 3 строк в 1 абзац
  1. Добавление строки в таблицу
Doc.Tables(1).Rows.Add
  1. Добавление колонки в таблицу
Doc.Tables(1).Columns.Add
  1. Добавление текста в ячейку
Doc.Tables(1).Cell(1;3).Range.Text = 'Текст, который добавляется в ячейку'
  1. Сохранение документа в pdf формат
Doc.ExportAsFixedFormat(Path; 17; openAfterExport; CreateBookmarks) 

где

  • Path — полный путь и имя нового файла формата PDF;
  • 17 — значение Microsoft.Office.Interop.Word.WdExportFormat, указывающие, что сохранять документ в формате PDF;
  • openAfterExport — Значение True используется, чтобы автоматически открыть новый файл; в противном случае используется значение False.
  • CreateBookmarks — значение указывает, следует ли экспортировать закладки и тип закладки. Значение константы WdExportCreateBookmarks:
    • wdExportCreateHeadingBookmarks = 1 — Создание закладки в экспортируемом документе для всех заголовком, которые включают только заголовки внутри основного документа и текстовые поля не в пределах колонтитулов, концевых сносок, сносок или комментариев.
    • wdExportCreateNoBookmarks = 0 — Не создавать закладки в экспортируемом документе.
    • wdExportCreateWordBookmarks = 2 — Создание закладки в экспортируемом документе для каждой закладки, которая включает все закладки кроме тех, которые содержатся в верхнем и нижнем колонтитулах.

P.S.: Аналогичная статья для Excel
Несколько способов форматирования и обработки данных в Excel документах с помощью IS-Builder.

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

Понравилась статья? Поделить с друзьями:
  • Word categories в английском языке
  • Word categories parts of speech
  • Word categories in grammar
  • Word categories for games
  • Word categories and examples