Форматы текста word vba

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

Let’s say your word document looks like this

enter image description here

Since I am not sure whether you are doing this from Word-VBA or from some other application like say Excel-VBA so I am including both methods.

Now if you are doing this from Word-VBA then you do not need to LateBind with it. Use this simple code.

Option Explicit

Sub Sample()
    Dim oDoc As Document
    Dim MyAr() As String, strToFind As String
    Dim i As Long

    '~~> This holds your search words
    strToFind = "deal,contract, sign, award"

    '~~> Create an array of text to be found
    MyAr = Split(strToFind, ",")

    '~~> Open the relevant word document
    Set oDoc = Documents.Open("C:Sample.docx")

    '~~> Loop through the array to get the seacrh text
    For i = LBound(MyAr) To UBound(MyAr)
        With Selection.Find
            .ClearFormatting
            .Text = MyAr(i)
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Execute

            '~~> Change the attributes
            Do Until .Found = False
                With Selection.Font
                    .Name = "Times New Roman"
                    .Size = 20
                    .Bold = True
                    .Color = RGB(200, 200, 0)
                End With
                Selection.Find.Execute
            Loop
        End With
    Next i
End Sub

However if you are doing from say Excel-VBA then use this

Const wdFindContinue = 1

Sub FnFindAndFormat()
    Dim objWord As Object, objDoc As Object, Rng As Object
    Dim MyAr() As String, strToFind As String
    Dim i As Long

    '~~> This holds your search words
    strToFind = "deal,contract, sign, award"

    '~~> Create an array of text to be found
    MyAr = Split(strToFind, ",")

    Set objWord = CreateObject("Word.Application")
    '~~> Open the relevant word document
    Set objDoc = objWord.Documents.Open("C:Sample.docx")

    objWord.Visible = True

    Set Rng = objWord.Selection

    '~~> Loop through the array to get the seacrh text
    For i = LBound(MyAr) To UBound(MyAr)
        With Rng.Find
            .ClearFormatting
            .Text = MyAr(i)
            .Replacement.Text = ""
            .Forward = True
            .Wrap = wdFindContinue
            .Execute

            Set Rng = objWord.Selection

            '~~> Change the attributes
            Do Until .Found = False
                With Rng.Font
                    .Name = "Times New Roman"
                    .Size = 20
                    .Bold = True
                    .Color = RGB(200, 200, 0)
                End With
                Rng.Find.Execute
            Loop
        End With
    Next i
End Sub

OUTPUT

enter image description here

Use this simple Visual Basic for Applications (VBA) script to reformat any text string within Microsoft Word.

I work in science and often have to review documents with references in them. It’s not uncommon for citations to contain the text “et al.” which most journals insist should be italicised. Rather than manually check all of these, a VBA script can be employed to automate the process.

Using the following procedure, we’ll open a Microsoft Word document and scan it for instances of “et al”. The script will then italicise every instance that it finds.

Instructions

Step 1

Open the Microsoft Word document that needs to be edited.

Step 2

Press Alt + F11 or otherwise go to the Developer ribbon and choose the “Visual Basic” icon if the Developer Tab is enabled.

Step 3

In the Visual Basic for Applications toolbar, go to Insert > Module

Screen capture of VBA

Inserting a module in Visual Basic for Applications.

Step 4

Insert the following code into the module:

Sub ItaliciseText()
  Selection.Find.ClearFormatting
  Selection.Find.Replacement.ClearFormatting
  'Italicises the selected text
  Selection.Find.Replacement.Font.Italic = True
  With Selection.Find
	'Insert the text string that needs to be italicised
    .Text = "et al"
    .Forward = True
    .Wrap = wdFindContinue
    .MatchCase = True
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
  End With
  Selection.Find.Execute Replace:=wdReplaceAll
End Sub

Step 5

Customise the script by deleting the sample text (.Text = "et al") and replacing it with the text string that you want italicised.

Step 6

Press the play button at the top of the window (the green triangle) to run the script. The entire document will be updated.

Other customisations

This script can be customised by changing the instructions:

  • To italicise: Selection.Find.Replacement.Font.Italic = True
  • To bold: Selection.Find.Replacement.Font.Bold = True
  • To underline: Selection.Find.Replacement.Font.Underline = True
  • To superscript: Selection.Find.Replacement.Font.Superscript = True
  • To subscript: Selection.Find.Replacement.Font.Subscript = True
  • To strikethrough: Selection.Find.Replacement.Font.Strikethrough = True
  • To double strikethrough: Selection.Find.Replacement.Font.DoubleStrikethrough = True
  • To shadow: Selection.Find.Replacement.Font.Shadow = True
  • To all caps: Selection.Find.Replacement.Font.AllCaps = True
  • To small caps: Selection.Find.Replacement.Font.SmallCaps = True
  • To hide: Selection.Find.Replacement.Font.Hidden = True

Likewise, to remove a format the parameter can be switched to “false”. For instance, this will remove the bold format from the text string:

Selection.Find.Replacement.Font.Bold = False

Finally, multiple formats can be stacked in the script. For instance, to italicise and underline some text, the following code will work:

Selection.Find.Replacement.Font.Italic = True
Selection.Find.Replacement.Font.Underline = True

 
 

Have Your Say

Макрос для форматирование Word документа (VBA)

Макрос — это набор команд и инструкций, группируемых вместе в виде единой команды для автоматического выполнения задачи. Вы можете записать последовательность действий или создать макрос с нуля, введя код на языке Visual Basic для приложений в редактор Visual Basic.

Постановка задачи: Создать макрос, который будет форматировать текст в соответствии к стандартам Единой конструкторской документации: 14 шрифт Times New Roman, полуторный междустрочный интервал, выравнивание по ширине листа, поля со всех сторон по 2 см.

Чтобы создать и использовать макрос нам нужно настроить наш Word. Для этого нажмем Файл=>Параметры=>Настройка ленты и поставим галочку напротив надписи «Разработчик». Теперь мы можем использовать макросы.

Для создания собственного макроса нужно перейти на вкладку Разработчик и нажать «Макросы», ввести название нашего будущего макроса и нажать «Создать». Откроется окно Microsoft Visual Basic for Applicatios(дальше VBA) в котором можно наполнить макрос кодом.


Sub Marcos()
'
' Marcos Макрос
'
'
End Sub

Теперь перейдем к самому коду. Сначала выделим весь документ, для того чтобы редактировать его.


Sub Marco()

'Выделяем ведь документ
Selection.WholeStory

Изменяем стиль на «Без интервала», чтобы избавиться от междустрочных интервалов.


'Стиль "Без интервала"
Selection.Style = ActiveDocument.Styles("Без интервала")

Приступаем к функциям форматирования текста. Выравниваем данный нам текст по ширине листа


'Выравнивание по ширине
ActiveDocument.Range.ParagraphFormat.Alignment = wdAlignParagraphJustify

Редактируем шрифт и его размер.


'Изменение шрифта
ActiveDocument.Range.Font.Name = "Times New Roman"

'Изменение размера шрифта
Selection.Font.Size = "14"

Так как междустрочный интервал мы убрали, то теперь можем изменить его на полуторный.


'Изменение междустрочного интервала
ActiveDocument.Range.ParagraphFormat.LineSpacingRule = WdLineSpacing.wdLineSpace1pt5

Для полного выполнения задачи нам не хватает только полей. Делаем поля с каждой стороны по 2 см.


'Изменение полей
'Поле слева
ActiveDocument.Range.PageSetup.LeftMargin = Application.InchesToPoints(0.786)
'Поле справа
ActiveDocument.Range.PageSetup.RightMargin = Application.InchesToPoints(0.786)
'Поле сверху
ActiveDocument.Range.PageSetup.TopMargin = Application.InchesToPoints(0.786)
'Поле снизу
ActiveDocument.Range.PageSetup.BottomMargin = Application.InchesToPoints(0.786)

Завершая помещаем курсор в конец документа, чтобы снять выделение и выводим сообщение, что документ отредактирован.


'Курсор в конец документа
Selection.MoveDown Unit:=wdLine, Count:=1

'отчёт
MsgBox "Документ отредактирован"

End Sub

Наш макрос готов. Чтобы его запустить надо закрыть окно VBA и перейти Разработчик=>Макросы выбрать наш макрос и нажать «Выполнить». Если окно VBA не открылось, не указало вам на ошибку и сообщение об успешном форматировании текста вывелось на экран — значит макрос успешно создан. Теперь сохраните его. Для этого нажмите Файл=>Сохранит как, выберите «Документ Word с поддержкой макросов(*.docm)» и укажите директорию в которую хотите его сохранить.

Автор: Beznoschenko


Похожие публикации

2016-05-26 • Просмотров [ 12290 ]


Наиболее
важной особенностью работы на VBA в Word
является вставка текста в документ при
работе с приложениями. Для этого служат
объекты Range и Selection, которые являются
главными для практически любых операций,
которые можно выполнять с помощью Word
VBA. Некоторые из этих действий можно
применять к документам в целом, но в
общем случае вам необходим диапазон
или выделенная область, прежде чем
вносить изменения. Мы, однако, рассмотрим
действия с документом при его создании.

Открытый
документ Word уже содержит объекты Range,
соответствующие многим его элементам.
Каждый абзац, таблица, ячейка таблицы,
комментарий и т. д. определяют
диапазоны. Например, для того чтобы
вставить некоторый текст в уже существующий
документ, необходимо прописать код:

ActiveDocument.Paragraphs(1).Range.Text
= «Oxo-xo!!»

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

If
Documents.Count
= 0
TheNDocuments.Add

Selection.Text
= «Изучение работы с текстом в документе
Word является важной составной частью
умения программировать в VBA, « +
TextBox1.Text +», и отвечает запросам всех
программистов!»

В
результате выполнения данного программного
кода в документе Word будет выведена
строка:

Изучение
работы с текстом в документе Word является
важной составной частью умения
программировать в VBA, Светлана, и отвечает
запросам всех программистов!

Здесь
имя Светлана, например, считано с
текстового поля некоторой формы, имеющей
всего одно поле ввода для имени и кнопку
«Вывод текста» (рис. 64).

Рис.
64.
Форма
ввода данных

При
работе с текстом на рабочем листе Word
необходимо знать следующие коды:

определение
цвета

Selection.Font.Color
=

wdColorRed
– красный

wdColorDarkRed
– бордовый

wdColorDarkTeal
– бирюзовый

wdColorBlue
– синий

wdColorGreeN–
зеленый

wdColorBlack
– черный

wdColorOrange
– оранжевый

определение
жирности

Selection.Font.Bold
=

wdToggle
– жирность

определение
начертания

Selection.Font.Italic=

wdToggle
– курсив

определение
выравнивания

Selection.ParagraphFormat.Alignment=

wdAlignParagraphRight
– выравнивание по правому краю

wdAlignParagraphCenter
– выравнивание по центру

wdAlignParagraphJustify
– выравнивание по левому краю

вставка
в текст конкретного предложения

Selection.TypeText
Text:=»Пример работы с текстом»

вставка
новой пустой строки

Selection.TypeParagraph

установка
размера букв

Selection.Font.Size
= 14

Примечание.
Для
правильного оформления кода пользуйтесь
возможностями создания макроса написания
программы.

Одним
из элементов оформления диалоговых
окон является элемент управления Image
(рисунок).
Его основные свойства:

Autosize
– изменяет размер рисунка на форме
(автоматически или нет);

Picture
– отображает графический файл, выводимый
на форму;

pictureSizeMode
– устанавливает масштабирование рисунка
(не весь рисунок, вся поверхность объекта,
целиком внутри объекта);

PictureAligment
– устанавливает расположение рисунка
внутри объекта (слева, справа, вверху,
внизу);

pictureTilling
– покрывает объект мозаикой из рисунка.

Данные
свойства либо устанавливаются в окне
свойств объекта, либо прописываются в
листинге.

Пример
30.
Создать
программу, которая будет производить
подсчет количества теплоты, выделяемой
в проводнике при протекании в нем тока.
Формула для расчета количества теплоты
известна под именем закона Джоуля –
Ленца:

где
Q

количество теплоты в Джоулях;

U

напряжение в вольтах;

t

время в секундах;

S

площадь поперечного сечения проводника
в квадратных миллиметрах;

l
– длина проводника в метрах;

р

удельное сопротивление материала
проводника в Ом × мм2/м.

Все
исходные данные вводятся в текстовые
поля формы. По итогам вычисления результат
в виде объяснительной записки выводится
в документ, а численный результат – в
специальное окно формы.

Технология
выполнения

Создайте
форму по приведенному рис. 65.

Рис.
65.
Разработанная
форма примера 30 в рабочем состоянии и
вывод результирующих сведений в документ
word

При
создании формы установите необходимые
свойства элементов. Установите свойство
Locked элемента TextBox6 как True, чтобы не
допустить случайного ввода пользователем
в него текста.

Описание
процедур

Private
Sub CommandButton1_Click()

If
Documents.Count = 0 TheNDocuments.Add

Selection.Text
= «
При
прохождении
тока
напряжением
в
» + TextBox1.Text + «
вольт
по
проводнику
длиной
» + TextBox4.Text + »
метров,
сечением
» + TextBox3.Text + «
кв.
мм
и
удельным
сопротивлением
» + TextBox5.Text + »
Ом*мм2/м
за
» + TextBox2.Text + »
секунд
выделится
» + TextBox6.Text + «
джоулей
теплоты»

Selection.Collapse
direction:=wdCollapseEnd

End
Sub

Private
Sub CommandButton2_Click()

Unload
Me

End
Sub

Private
Sub TextBox1_Change()

scet

End
Sub

Private
Sub TextBox2_Change()

scet

End
Sub

Private
Sub TextBox3_Change()

scet

End
Sub

Private
Sub TextBox4_Change()

scet

End
Sub

Private
Sub TextBox5_Change()

scet

End
Sub

Private
Sub scet()

If
IsNumeric(TextBox1.Text) = True And

IsNumeric(TextBox2.Text)
= True And

IsNumeric(TextBox3.Text)
= True And

IsNumeric(TextBox4.Text)
= True And

IsNumeric(TextBox5.Text)
= True AndNot Val(TextBox4.Text)

=
0 AndNot Val(TextBox5.Text) = 0 Then

rez
= ((Val(TextBox1.Text) ^ 2) * Val(TextBox2.Text) *

Val(TextBox3.Text))
/ (Val(TextBox4.Text) *

Val(TextBox5.Text))

TextBox6.Text
= Str$(rez)

CommandButton1.Enabled
= True

Else

TextBox6.Text
= «»

CommandButton1.Enabled
= False

End
If

End
Sub

Примечание.
При
работе данного приложения все значения
полей ввода должны быть числовыми. В
VBA есть специальная функция для проверки
того, является или нет введенная строка
записью числа – IsNumeric. Для проверки
отличия от нуля значений в последних
двух полях ввода используется функция
Val, которая переводит строковое выражение
в числовое, если это строковое выражение
содержит в своем начале цифры (или все
состоит из них).

Функция
Str делает преобразование, обратное тому,
что производит Val, – конвертирует
числовое значение выражения в строковое,
что позволяет этому значению в дальнейшем
обрабатываться как строке.

Таким
образом, функции Val и Str преобразуют типы
данных обрабатываемых ими переменных,
соответственно, из строкового в числовой
и из числового в строковый (см. главу
3).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Понравилась статья? Поделить с друзьями:
  • Форматы таблиц excel скачать
  • Форматы сохранения файлов в текстовом процессоре word
  • Форматы сохранения текстовых документов в текстовом процессоре word
  • Форматы сохранения документов ms word 2010
  • Форматы сохранения документа ms word 2010