Vba вставка текста в документ word

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

I can’t quite figure out exactly what you’re trying to do there, but Selection.TypeText will collapse the selection down to the insertion point, so you effectively have no characters selected by the time you try to «revert the font». You either need to re-select the text, or use a Range object instead of the Selection to identify the text to be affected.

The reason that you get an error at the line:

Set Selection.Font = oldFont

…is because — unusually, and perversely — you should not use the Set keyword when assigning to the Font property. Rather than storing a reference to a Font object, the assignment simply applies the properties of the assigned font.

This is very confusing API design, made all the more confusing because you do need to use the Set keyword when reading the Font property, and because that does assign a reference to a Font object!

And that’s the other reason why your code won’t work — you’re taking a reference to a Font object which you then modify, and your reference points to the same Font object that has now changed.

What you actually need to do is create a new Font object to store the original font details, as follows:

Set oldFont = Selection.Font.Duplicate

0 / 0 / 0

Регистрация: 05.10.2012

Сообщений: 3

1

05.10.2012, 18:42. Показов 72817. Ответов 64


Студворк — интернет-сервис помощи студентам

Здравствуйте, ув. форумчане. Помогите начинающему. У меня есть экселевский файл с реквизитами клиентов. могу ли я сделать, чтобы по нажатию какой-нибудь кнопки(или по запуску макроса) создавался договор по определенному контрагенту из шаблона word?



0



Programming

Эксперт

94731 / 64177 / 26122

Регистрация: 12.04.2006

Сообщений: 116,782

05.10.2012, 18:42

64

matresh

161 / 17 / 2

Регистрация: 14.07.2011

Сообщений: 74

05.10.2012, 19:44

2

Была такая же проблема. Но тут подсказали решение
Решение

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Set wa=CreateObject("Word.Application") ' Создаем приложение Word
wa.Visible=True ' делаем Word видимым
 
Set wd=wa.documents.Add("C: (шаблон).docx")' берем шаблон
 
' в шаблоне заранее делаем закладки, и присваем им соответствующие значение из excel
For ii=1 to 5
   For jj=1 to 4
    marker="инд"& ii & jj 'наименование закладки
    wd.Bookmarks.Item(marker).Range.Text=wsh.Cells(1,jj+3).Value ' wsh-лист с которого берем значения
   Next jj
Next ii
 
wd.SaveAs Filename:= soh & "Опрос" & ".docx" ' сохраняем получившиеся файл; soh- директория сохранения
 
wd.Close True
wa.Quit
set wa=Nothing



1



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

05.10.2012, 19:53

3

Лучший ответ Сообщение было отмечено как решение

Решение

Вот, набросал схемку… Распакуй в какую-либо папку, открой xls-файл и щелкни по надписи «ПУСК!».

С закладками и полями, конечно, лучше будет.



9



176 / 15 / 2

Регистрация: 27.09.2012

Сообщений: 45

05.10.2012, 22:06

4

Кстати можно прекрасно работать без шаблонов и без связей файлов. Если интересно могу выложить файл где делал формирование документа с форматирование (с нуля) а также вставка таблиц из Excel… если поможет пишите в личку…



1



0 / 0 / 0

Регистрация: 05.10.2012

Сообщений: 3

08.10.2012, 15:53

 [ТС]

5

Цитата
Сообщение от Catstail
Посмотреть сообщение

Вот, набросал схемку… Распакуй в какую-либо папку, открой xls-файл и щелкни по надписи «ПУСК!».

С закладками и полями, конечно, лучше будет.

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



0



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

08.10.2012, 16:38

6

Конечно! Чуть позже приведу пример.



0



695 / 236 / 18

Регистрация: 17.01.2011

Сообщений: 583

Записей в блоге: 1

08.10.2012, 20:21

7

Лучший ответ Сообщение было отмечено как решение

Решение

Цитата
Сообщение от Funny06
Посмотреть сообщение

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

Позволил себе немного переделать код уважаемого Catstail. Щёлкните правой мышкой по строке с ФИО и «брюки превращаются в элегантные шорты»…

P.S. Тыкать на форуме не принято, и ко всем необходимо обращаться вежливо и на ВЫ..



2



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

10.10.2012, 22:21

8

Лучший ответ Сообщение было отмечено как решение

Решение

Вот доработанный код. Чтобы выбрать строки для генерации, нужно дважды щелкнуть мышью в пятой колонке нужной строки (см.) А потом — как и раньше — «Пуск»



5



695 / 236 / 18

Регистрация: 17.01.2011

Сообщений: 583

Записей в блоге: 1

11.10.2012, 08:39

9

Цитата
Сообщение от Catstail
Посмотреть сообщение

Чтобы выбрать строки для генерации, нужно дважды щелкнуть мышью в пятой колонке нужной строки

Понравился способ замены буквы n, на чёрный кружок. Я и не знал, что в Экселе есть такие чудоковатые алфавиты..



1



Модератор

Эксперт функциональных языков программированияЭксперт Python

34706 / 19227 / 4039

Регистрация: 12.02.2012

Сообщений: 32,183

Записей в блоге: 13

11.10.2012, 09:17

10

Лучший ответ Сообщение было отмечено как решение

Решение

А это не я придумал… У кого-то увидел.



2



0 / 0 / 0

Регистрация: 05.10.2012

Сообщений: 3

11.10.2012, 14:23

 [ТС]

11

Спасибо всем огромное, вы мне прямо жизнь спасли Особенная благодарность Catstail за предоставленные примеры.



0



1 / 1 / 0

Регистрация: 06.11.2012

Сообщений: 6

06.11.2012, 18:08

12

Подскажите пожалуйста, воспользовавшись Вашим примером, у меня возникла проблема.

Создаю Word-шаблон с определенным форматированием (шрифты, выравнивание, таблицы), а после обработки шаблона через макрос, все форматирование пропадает.

Как мне произвести вставку в шаблон, но при этом не утратить форматирование.

Спасибо!



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

06.11.2012, 19:07

13

evavdeev,

  1. а каким кодом вы пользуетесь?
  2. выложите пример вашего шаблона;
  3. поясните, что нужно сделать.



0



evavdeev

1 / 1 / 0

Регистрация: 06.11.2012

Сообщений: 6

07.11.2012, 12:35

14

Брал за основу «Задачи-VBA-57a», вот что у меня получилось:

Visual Basic
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
38
39
40
41
42
43
44
45
46
Sub main()
 
Dim wdApp As Object
Dim wdDoc As Object
 
    HomeDir$ = ThisWorkbook.Path
    
    Set wdApp = CreateObject("Word.Application")
    
    ii% = 3
    
    Do
    
      If Cells(ii%, 1).Value = "" Then Exit Do
      
      If Cells(ii%, 20).Value <> "" Then
      
         ID$ = Cells(ii%, 2).Value
         Adress$ = Cells(ii%, 5).Value
         SN$ = Cells(ii%, 12).Value
         DataC$ = Date
      
         FileCopy HomeDir$ + "template.doc", HomeDir$ + "" + ID$ + "_" + DataC$ + ".doc"
      
         Set wdDoc = wdApp.Documents.Open(HomeDir$ + "" + ID$ + "_" + DataC$ + ".doc")
      
         wdDoc.Range.Text = Replace$(wdDoc.Range.Text, "&id", ID$)
         wdDoc.Range.Text = Replace$(wdDoc.Range.Text, "&adress", Adress$)
         wdDoc.Range.Text = Replace$(wdDoc.Range.Text, "&sn", SN$)
 
         wdDoc.Save
         wdDoc.Close
      
         Cells(ii%, 20).Value = ""
      
      End If
      
      ii% = ii% + 1
      
    Loop
      
    wdApp.Quit
 
    MsgBox "Готово!"
 
End Sub

При этом все работает корректно, но в полученном файле doc пропадает выравнивание, жирный шрифт, таблица и т.д. (все приводится к обычному тексту)

Надо чтобы сохранилось стандартное форматирование шаблона (сохранились все стили и таблица)

Вложения

Тип файла: doc template.doc (28.5 Кб, 313 просмотров)



1



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

07.11.2012, 12:56

15

evavdeev, какая версия программы Word у вас (2003, 2007 или другая)?



0



1 / 1 / 0

Регистрация: 06.11.2012

Сообщений: 6

07.11.2012, 14:14

16

установлен Microsoft Office 2010 Pro



0



Скрипт

5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

07.11.2012, 14:46

17

Лучший ответ Сообщение было отмечено как решение

Решение

evavdeev, код ниже нужно вам переделать, т.к. в этом коде показан только принцип.
У меня код написан для использования только в программе Word.

Использование закладок в программе Word:

Кликните здесь для просмотра всего текста

Если планируется создавать документы без участия человека, то можно использовать закладки.
Закладка в программе Word — это поименованный диапазон в документе.

  1. Чтобы было видно закладки (Word 2010):
    Файл — Параметры — Дополнительно — Показывать содержимое документа — поставьте флажок «Показывать закладки» — OK.
  2. Вставка закладки:
    1. Поставьте курсор в документе Word, куда должен вставляться текст из книги Excel;
    2. Вкладка «Вставка» — группа «Ссылки» — Закладка — дайте имя «Закладка_1» — Добавить;
    3. Возле курсора появится серая полоска, которая означает, что здесь находится закладка.

Код:

Visual Basic
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
Sub Procedure_1()
    
    'Здесь нужно указать путь, где находится шаблон.
    Const sTemplatePath As String = "C:UsersUserDesktoptemplate.doc"
 
    'Здесь нужно указать путь, где должен быть новый документ.
    Const sNewDocumentPath As String = "C:UsersUserDesktopFileName.doc"
    
    'Здесь нужно указать имя закладки, которая находится в шаблоне Word.
    'В эту закладку будет вставляться текст из книги Excel.
    Const sBookmark_1 As String = "Закладка_1"
    
    Dim oDocument As Word.Document
    
    'Создаём документ на основе шаблона.
    FileCopy Source:=sTemplatePath, Destination:=sNewDocumentPath
    
    'Открываем новый документ, чтобы занести в него данные из Excel.
    Set oDocument = Documents.Open(FileName:=sNewDocumentPath, Visible:=False)
    
    'Вставка в закладку текста.
    oDocument.Bookmarks(sBookmark_1).Range.Text = "text"
    
    'Удаление закладки, чтобы закладки не приводили пользователей в замешательство.
    oDocument.Bookmarks(1).Delete
    
    'Закрываем новый документ с сохранением.
    oDocument.Close SaveChanges:=-1
 
End Sub



3



evavdeev

1 / 1 / 0

Регистрация: 06.11.2012

Сообщений: 6

07.11.2012, 20:08

18

Большое спасибо за помощь!

Вот что у меня получилось:

Visual Basic
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
Sub ExportTemplate()
 
    Dim oWord As Word.Application
    Dim oDoc As Word.Document
    Set oWord = CreateObject("Word.Application")
    
    LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
    Data$ = Date
    sTemplateDir$ = ThisWorkbook.Path
    sTemplatePath$ = sTemplateDir$ + "" + "template.doc"
    NumTem = 0
    
    For CurRow = 2 To LastRow
    
    If Cells(CurRow, 4) = "" Then
        GoTo Continue
    Else
    
        IDN$ = Cells(CurRow, 1).Value
        Address$ = Cells(CurRow, 2).Value
        SN$ = Cells(CurRow, 3).Value
        
        sNewDocumentPath$ = sTemplateDir$ + "" + IDN$ + "_" + Data$ + ".doc"
    
        Const sBookmark_address As String = "address"
        Const sBookmark_idn As String = "idn"
        Const sBookmark_sn As String = "sn"
    
    FileCopy Source:=sTemplatePath$, Destination:=sNewDocumentPath$
      
     Set oDoc = oWord.Documents.Open(Filename:=sNewDocumentPath$, Visible:=False)
    
    oDoc.Bookmarks(sBookmark_address).Range.Text = Address$
    oDoc.Bookmarks(sBookmark_idn).Range.Text = IDN$
    oDoc.Bookmarks(sBookmark_sn).Range.Text = SN$
    
    oDoc.Bookmarks(1).Delete
    oDoc.Bookmarks(2).Delete
    oDoc.Bookmarks(3).Delete 'Ошибка Run-time error '5941': Запрашиваемый номер семейства не существует
    oDoc.Close SaveChanges:=-1
    NumTem = NumTem + 1
    Cells(CurRow, 4) = ""
    
    End If
      
Continue:
    
    Next CurRow
 
    MsgBox prompt:="Всего обработано: " & NumTem & " строк, _
    Title:="Созданные шаблоны"
 
End Sub

Все работает, но есть одна проблема.
В процессе выполнения скрипта, появлятся ошибка при удалении 3-ей Закладки. Ошибка описана с листенге.
Пока я с ней не смог справиться.



0



5468 / 1148 / 50

Регистрация: 15.09.2012

Сообщений: 3,514

07.11.2012, 20:12

19

evavdeev, удаляйте закладки не по порядковым номерам, а по именам.
Например, в сообщении #18 в коде в строке 33 идёт обращение к закладке по имени, а в строке 31 — по порядковому номеру.

Примечание: ошибка из-за того, что после удаления двух закладок, у третьей закладки порядковый номер уже изменится и станет 1.



1



evavdeev

1 / 1 / 0

Регистрация: 06.11.2012

Сообщений: 6

07.11.2012, 20:26

20

Если я правильно понял, то надо так:

Visual Basic
1
2
3
oDoc.Bookmarks(idn).Delete
    oDoc.Bookmarks(sn).Delete
    oDoc.Bookmarks(Address)

Но опять ошибка

Добавлено через 4 минуты
немного ошибся:

Visual Basic
1
2
3
oDoc.Bookmarks(idn).Delete
    oDoc.Bookmarks(sn).Delete
    oDoc.Bookmarks(Address).Delete

Ошибка таже



0



������ � ������� � Word VBA

������ � ������� � Word VBA

������� Range � Selection �������� ���������� ������� ��� ����������� ����� ��������, ������� �� ������� ��������� � ������� � ������� Word VBA. ��������� �� ���� �������� ����� ��������� � ���������� � �����, �� � ����� ������ ��� ��������� �������� ��� ���������� �������, ������ ��� ������� ���������.

� �������� Range � Selection ���������� ����� ������, �� ���� � ��������� �������� �������. ��� ������� ������������ ����������� ������������������ ��������, ��� �������� �� ������� ��������� ��������� ��������. ��� ������� ����� ����� ����� ������� � �������. ������ ��������� �������� � ������ ��������� ��� ���������� ��������, � ������ — ��� ����������. ������������ �������� ������� � � ���, ��� ������ Selection ������������� ��������� � ������� ����: ������, ������������ ����������� ��� ������ ������� �������, � �� ����� ��� ������� Range ���������� ���������� �� ���������� ������� � ������ �������� �����.

����������� ������ Selection � ��� ������, ���� ���� ��������� ������� �� ������������, ��������, �� ������ ������� �����, � ������� ����� ��������� ������������ ��������, ��� � ��� ������, ���� ��� ���������� �������� ������������, ����� ������ ����� ����� �������. � ������ ��������� ������� ����� �������� ������� Range. ��� ������������ ������� �������� ���������� �������� � ������ ���������� ������������: Word ��������� ���������� ������ ��� ������ ��������� ����������� ���������� �������, � ��� ��������� ��������� ���������� ������ �� �����������. ����� ����, ��������� ���������� �� ���������� �� ���������� ��������, ��������� �������������.

�������� �� �� ��������, ������� Selection � Range ����� ��������� ���� �� �������. ��� ����������� ����������� ����������� ������, ��� ��� ������ ������� �������������� �������� ������ � �����������. � ����������������� �����, ������������ ������ ���������� ���������� ��������� ������������- �������� ���. ����������� ��������� ������� ������.

* ��� ��������� ��������� ������������ ��� ����� Select. ��������, ��� ������� RangeR ������� ����� ��� RangeR. Select.

* ��� ��������� ������� � ���������, ��������������� �� �� ����������, ��� � ���������� �������, ������������ �������� Range.

�������: ���� �����, ����������� � ��������� ������, ���������� ��� ���������, � �� ������ ��������� ��� � ���������� �������, ������ �������� � ���� ��� ���������� Selection . Range . ���������.

Word VBA ���������� ����� ��� ������� ��� ����������� � ��������� �������� ���������� � ���������� ��������. � ��������� ������� � ������������ ������ ����� ������ �� ���; ��� ���������� � ������� �������� ��� �������� ���������� � ���������� �������.

����� Expand ����������� ������������ �������� ��� ���������� �������, �������� ���� ������ � �� �����. ���� ����� ������������ ����� ������, �����, ����� ��� ���-������ ������. �� ������ �������� ������ ���� ������� ������������ ����; ����� ����, ���������� �������� ������ � ������ ��������� ��� ���������� ������� �� �����������.

��� ���������� � ���������� ������� �����, ������� ����� ��������� ����� �� ���, ����������� ����� ����������:

Selection.Expand(wdWord)

�� ������ ������������ ����� �� ��������� �������� ��� ���������� �������; wdCharct er, wdWord, wdSent ence, wdParagraph, wdSection, wdStory, wdCell, wdColumn, wdRow, wdTable � (������ ��� �������� Selection) wdLine. �� ��������� ������������ ��������� wdWord.

������ ��� ������� ������������ �� ����� ���������� �������: ������� Selection (�� �� ���������) ����� �������� ����� Expand. ���� ����� �������� ��������������� �������� Word, ������� ��������� ��������� ���������� ������� ��� ����������� ��������� ����. ������ ���, ����� ��������� �������� ����� Extend, ���������� ������� ������������� �� ���� ������, ������� ������� ����� �� ������ �������: ������� �����, �����������, �����, ���������� �������� ��� ����� ��������. ���� �� ������� �������� � ���� ������ �������, ��������, Selection.Expand ( «�» ). ���������� ������� ����� ��������� ������ �� ������� �������������� ���������� �������.

Word VBA ��������� ��� �������� ���������� ������ � ����� ��������� ��� ���������� �������. ������ ������ � ����, ��� ������, � ����� ������� ������������ ����� Move, �������� ������������ ��������� ��� ���������� �������: ��� �� ���������� �����, ������� ���������� � ��������� �������.

����� Move �������� �������� ��� ���������� �������, ������� � �� ������, ������� �� ������������, � � ��� ��� ��� �������� ������. ������������ ��������� � ������� ��������� �������. ����� ����� ����� Move ���������� «������» ������ � ������������ � ������ ������������. �� ��������� ����������� �� ������ ������������ ������ Expand � Mover,nd ��� ���������� ������� �������.

����������� ���� ������ ���������� ����������� �������� � ��������� �� ��� ������ �����. �������� �������� �� ��, ��� �� ����������� ����������� ��������� � �������� �������� ��������� Uni t (������ ���� ���������� ����������� �������� �������� � �������

«���������� ���������� � ���������� ��������» ������ � ���� �����). �������� Count ������������ ����� ����� ������������� �����, ���� �� ������ ���������� ������ ������ �� ��������� (�.�. � ��� �����), ��� �������������, ���� �� ������ ���������� ������ ����� �� ���������. � ����������� ���� ������� ��������� �� ��������� � ������, ��������� ������������ ������� �������� (���������� ������������ ���������) ����� �� ������������:

oTheRange .Move Unit : = waParagraph, Count, : = -2

������ MoveStart. � MoveEnd �������� ����������� ��� ��, ��� � ����� Move, ������ ��� �������� ��������� ��� �������� ����� ��������� ��� ���������� ������� ��������������. ����������� ���� ���������� ���������� ������ ���������� ������� �� ��� ����� ����� � ����� ���������:

Select-on.KoveStart Unit : = wdWord, Count := 3

�������� �������� �� ��, ��� ���� �� ����������� ��������� ����� ������� � �����, Word ������ �������� ��� ���������� ������� � ���������� �� � ������������ � ���������� ������������.

��� ���� ���� �������, Start Of ��� EndOf, ���������� ��� ��������� ������ ��� ����� ��������� ��� ���������� �������. ����� Start Of ���������� ������ ������� ������� � ������ �������� �����, � �� ����� ��� ����� EndOt ���������� ����� ������� ������ � ����� �������� �����.

�� ������ ������������ �������� Extend � ����� ������� ��� �������� ��� ���������� Word. ���� ������������ ������� ������� ��� ��������� � ���� ����, � �������� �� ��������� �� �����������, ����� �� ����������. ����������� ��������� wdMove ��� �������� ������� ��� ��������� wdExtend ��� ����������� ������ ��������� �������. ���� �������� ��������������� ������:

Selection. Start Of Unit := wdSentence, Extend := wdMove

����� ����� ��� ���������� ����� �������� ��� ���������� ������� � �����, ������� �� �������� �������� ������. � ����������� ����� ������ ��������� �������� ��� ���������� ������� — ��� ����� �������� ��� ���������� �������, ��������� � �������� ����� ������� ���������. ������ �������� �������� ����������� ������ � ��� ���������, ����� ��� ���������� �������� ����, ������� ��� ������ ������� �� ��� ����� ���������� ������� ��� ���������, �������� ��� ������ ������. (�� ������ �������� ������� �����, ����� ������, � ����� ��������� ������ �������� � «��������» �������� ��� ���������� �������).

����������� ����� Collapse ��� ������ ��������� ��� ���������� �������. �� ������ ����� ������ � ��� ��������� ��� �������� �����, ��������� �������������� �������� Direction. ����������� ���� ���������� ������� ���������� ������� � �� ��������� �����:

Selection.Collapse

� ���� ������ ������� ���������� ������� � �� �������� �����:

Selection.Collapse( Direction:=wdCollapseEnd)

���� �� ������� ��������, ������� ������������� ������ ������, � ��� �������� ����� (��������� ��������� wdCollapseEnd), Word ��������� ������ �������� ����� ����� ������ (��� ��������, ��� ������ �������� ����� ���������� � ��������� ������). ���� �� �� ������ ���������� ���-�� ����� ������ ������ ��������� ���������, �� ������ ������� ����������� �������� ������� � ������� ������ MoveEnd, ��������� ����������, �������� ����:

��������.MoveEnd Unit := wdCharacter, Count := -1

������� ���� ����� � ��������� ��� ���������� ������� ������ ��������: ������ ����������� ����� Delete ���������������� �������. �� ������ ������������ � ����� Cut, ���� ������ ������� ����� � ��������� ��� � ����� ������. ������� ��, ����� ���� �������� ����� � ����� ������, �� ������ ������� �� ����� � ��������� ��� ���������� �������.

�� ������ �������� �����, ������ ���������� � ����� ������, � ����� �������� ��� ���������� �������, ���������������� ������� Paste ����� �������. ���� ������ ���������� ��� �� ����, ����������� ����� ������ ������� �������� ����� � �������, ����� ��� �� ��� ��� ���������� ����� ���������� ������� �������� � Word.

���� ������������� ������ ������ ��� �������� ������ �� ������ ����� � ������ ������� ������ ���������, ���� ����� �� ������ ����������� ����� �����������. ������� ������� ������������ �������� Text ��� FormattedText ��������� ��� ���������� �������. ������� ��� �������� ������� ��������� ��� ���������� �������, ���������� �����, ������� �� ������ ��������, � ���. ������ ���������� ������ ���� ���� �� ��� ���, ���� ������������ ����� �� ������ ����� �������� ������������ ����� � �������.

����������� ���� �������� ���� �������� ����� �� ���������� ������� � ������ ��������, ����������� � �������� (�������� �������� ����������� ��������� ������ ����). � ����� ����� ������������ �������� ������ ��� �����; ����� �������������� ��� ���� ��������:

With ActiveDocument.Bookmarks("TheBookmark")

Set RangeY = _

ActiveDocument.Range(Start:=.Start, End=.Start)

End With

RangeY.Text = Selection.Text

��� �������� ������ � ������� � ��� �������������� ������ �������� �������� Text ��������� FormattedText.

���������� ��� ����������� ������� ���������� ������ �������� ������� �������� Text ��������� ��� ���������� ������� ������ ������, ������� �� ������ ��������. ��� ����������������� �� �������, ���������� ����:

Range2.Text = «��, ��! � ���� ����-�� ������ ���!»

������ ���������, ��� ������������� �������� Text �������� � ������ ������ ������������� � �������. �� ��������� ����� (���� ������ �� ������������� �� ������ �������� ������������ �����), ������� ������� ������.

����������� ������ Insert Before ��� Insert After �������� Range ��� Selection ��� ������� ������ � ������������ ����� ���������, �� ���������� ��� ���� ������������ �����. ��� ������ ��������� �������� ����� ����� ��������������� ����� ��� ����� ���������� ������� ��������������. Word �������� ����������� ����� � ���������� ������� ��� ��������.

��� ������������� ������ �� ������� ������������ ���������� �������� �����, ������� �� ������ ��������. ����������� ���� �������� ���� ��������� ����� �����, ���������� ����� Dairy Entry � ������ ���������� ������� (�������� �������� �� ������������� ����� ��������� VBA, ��� vbCr, ��� ���������� ����� ������). ����� ����� � ����� ����������� ����� �����, ������� ���������� � ������� ����. ���� �� �������� ����� ����� �� ���������� ����� ����, �����, ���������� ������� ����, �������� ����� ����� ������ � ���������� �������.

Dim strInsert Text As String

Selection.Insert Before "Dairy Entry" & vbCr

strInsert Text = "Today" & Chr(146) & "s date is"

strInsertText = _

strInsertTex't & Format (Now, "Long date") & ". "

Selection.InsertAfter strInsertText & vbCr

���� ������ ����������, ����� ������� ����������� ����� ����� ��������� ��������� ���������� ������� VBA, ������������ ��������� ��������, � ����� �������� � ��������� VBA. ��������� �������� � �������������� � ��������� ��������� �������� � ������� VBA �������� � ����� 11.

���������� ������ �������� ����� ������ ����� � �������� — �������� ���� ������ (�������������� ���������� vbCr) � ������� �������� Text ��� ������� Insert Before ��� Insert After. ����� Add, ����������� � ���������� Paragraphs, ��������, �� �� ����� ������ � ����������.

����������� ��� � ��� ������, ���� ��� ���������� ���������� ����� ����� � ��������� ��� ���������� �������, � �� � �� ������ ��� �����.

��������� ������� ��������� ��� ���������� ������� — ��� ��� ���� � ��������� �������� ���� ������. ��� ��� �������� ������������� �������� �� ���� ������ ��������� Word � ������������� ��������� �������.

��� ��������

������������� ������ �…

Font

��������������� �������� ������� ������� �������������� ��������, ����� ��� Name, Size � Bold. �� ��������� �������� �� ������ �������� ���������������� ������ � ����� ������ ��������� �������������� �������� Range, �� ��������� � �������� Font, �� ������ �� ��� ������ � ����������� ���������

Paragrap

��������������� �������� ������� ������� �������������� �������, ����� ��� hFormat LeftIndent ��� LineSpacing

Style

��� ����� ������� ��� ������, ������������ � ��������� ��� ���������� �������

Borders

������� ������ ������

Tabstops

���� � ������������ ����� ���������. �� ������ �������� ������ � ���� ��������� ������ � ������� �������� Paragraph, � �� ��������������� ����� ��������� ��� ���������� �������

Доброго времени суток всем подписчикам и читателям блога scriptcoding.ru. В этой статье мы продолжим изучать класс Selection, который показывает, как выделить фрагмент текста в документе Word.

Для начала давайте вспомним, что выделение фрагмента текста осуществляется следующим образом: в большинстве случаев нужно выбрать несколько фрагментов, для этого сначала выбираем один нужный фрагмент, далее удерживаем клавишу «Ctrl« и выбираем остальные фрагменты. Теперь перейдем к теме публикации…

Объект Word Selection содержит довольно много методов, большая часть из которых практически не используется, да и превращать блог в энциклопедию просто нет смысла. Поэтому, я решил разбить описание методов на две статьи, выбрав только те, которые чаще всего используются. В этой первой части я рассмотрю примеры работы с двумя категориями – методы с префиксомInsert и Move. Со второй частью можете ознакомиться в статье «Объект Word Selection — выделение текста, методы #2«.

Содержание

  1. Методы Insert… – выделение фрагментов текста в Word
  2. Методы Insert… – выделение фрагментов текста в Word
  3. Методы Insert… – выделение фрагментов текста в Word
  4. Методы Insert… – выделение фрагментов текста в Word

Методы Insert… – выделение фрагментов текста в Word

как выделить фрагмент в тексте

Примеры будут как для редактора VBA, так и для сценариев Windows Script Host, и так, начнем…

Методы с префиксом Insert… позволяют вставить текст в документ:

InsertAfter(text) и InsertBefore(text) – Вставка текста (text) в конец или в начало выделения. При отсутствии выделения вставка производится там, где находится курсор. Сам материал остается выделенным.

InsertBreak(type) — Вставляет страницу, колонку или секцию. Параметр type содержит значение константы WdBreakType:

  • wdTextWrappingBreak — 11 — Конец текущей строки и продолжение вставки ниже изображения, таблицы или другого объекта. Материал продолжается на следующей пустой строке, которая не содержит таблицу, совмещенную с левой или правой границей.
  • wdLineBreakClearRight — 10 — Перевод на новую строку.
  • wdLineBreakClearLeft — 9 — Перевод на новую строку.
  • wdColumnBreak — 8 — Разрыв колонки.
  • wdPageBreak — 7 — Вставка новой страницы.
  • wdLineBreak — 6 — Перевод на новую строку.
  • wdSectionBreakOddPage — 5 — Начало нового раздела со следующей нечетной страницы.
  • wdSectionBreakEvenPage — 4 — Начало нового раздела со следующей четной страницы.
  • wdSectionBreakContinuous — 3 — Новый раздел без разрыва страницы.
  • wdSectionBreakNextPage — 2 — Начало нового раздела со следующей страницы.

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

Программный код на VBScript:

' ----------------------------------------------------------------------------
' Объект Word Selection - методы
' Пример на языке VBScript - выделение фрагментов Word текста
' Selection-1.vbs
' ----------------------------------------------------------------------------
Option Explicit
' Глобальные переменные
dim oWord, oDoc, oSel, i
 
' Процедура создания нового документа
Sub Create_Doc()
Set oWord = CreateObject("Word.Application")
Set oDoc = oWord.Documents
oDoc.Add()
Set oSel = oWord.Selection
oWord.Visible = True
End Sub
 
Sub Insert_After_Before()
     With oSel
     .Text = "как выделить фрагмент текста "
     .InsertAfter "          ............Конец"
     .InsertBefore "Начало......    "
     .EndOf
     .InsertBreak 6
     End With
End Sub
 
call Create_Doc
call Insert_After_Before

Давайте посмотрим, что данный пример делает. При вызове процедуры Insert_After_Before происходит добавление в документ текстовой строки, далее в конец добавляется фраза » …………Конец», а в начало — «Начало…… «. Потом происходит перевод курсора в конец и добавление перевода строки.

Пример на JScript:

// ----------------------------------------------------------------------------
// Объект Word Selection - методы
// Пример на языке JScript - выделение фрагмента в тексте
// Selection-1.js
// ----------------------------------------------------------------------------
 
// глобальные переменные
var oWord, oDoc, oSel, i
 
function Create_Doc(){
oWord = WScript.CreateObject("Word.Application");
oDoc = oWord.Documents;
oDoc.Add();
oSel = oWord.Selection;
oWord.Visible = true;
}
 
function Insert_After_Before(){
     with(oSel){
                 Text = "как выделить в документе фрагмент текста ";
                 InsertAfter("          ............Конец");
                 InsertBefore("Начало......    ");
                 EndOf();
                 InsertBreak(6);
     }
}
 
Create_Doc();
Insert_After_Before();

Для VBA мы просто запускаем редактор кода, добавляем новый модуль и прописываем код, в моем случае имя модуля — Module1:

Sub Module1()
' ----------------------------------------------------------------------------
' выделение в Word фрагментов текста
' ----------------------------------------------------------------------------
 
Dim oWord1 As Object, oDoc1 As Object, oSel1 As Object, i
 
Set oWord1 = CreateObject("Word.Application")
Set oDoc1 = oWord1.Documents
oDoc1.Add
Set oSel1 = oWord1.Selection
oWord1.Visible = True
 
'***************************************
With oSel1
     .Text = "как выделить фрагмент текста "
     .InsertAfter "          ............Конец"
     .InsertBefore "Начало......    "
     .EndOf
     .InsertBreak wdLineBreak
End With
'***************************************
 
End Sub

И так, с одной теоретической частью мы закончили и написали программный код, теперь можно приступить к следующей части.

Методы Insert… – выделение фрагментов текста в Word

InsertCaption(Label, Title, TitleAutoText, Position, ExcludeLabel) — Вставляет заголовок сразу после или перед указанным выбором. Обязательным является только параметр Label.

Label – Нумерационный заголовок. Параметр может быть строкой или значением константы WdCaptionLabelID:

  • wdCaptionEquation — Уравнение
  • wdCaptionFigure — Рисунок
  • wdCaptionTable – Таблица

Если метка (Label) не определена, то возникнет ошибка. Для определения метки надо использовать метод Add коллекции CaptionLabels, например:

Applicationd.CaptionLabels.Add Name:="Рисунок"

Title– Заголовок, который будет отображаться справа от метки.

TitleAutoText– Авто-заголовок, перекрывает параметр Title.

Position— Указывает, будет ли вставлен заголовок выше или ниже. Может быть одной из констант WdCaptionPosition:

  • wdCaptionPositionAbove — 0 — Метка название добавляется выше.
  • wdCaptionPositionBelow — 1 — Метка название добавляется ниже.

ExcludeLabel— TRUE — отключить метку, заданную в параметре Label. FALSE — включить метку. Дополнительно.

Ниже я приведу примеры, что бы не дублировать программный код, я привел только содержимое процедуры Sub Insert_Caption.

' VBScript
Sub Insert_Caption()
     oWord3.CaptionLabels.Add "Номер"
     For i = 0 To 10
                 oSel3.InsertCaption "Номер", "    как выделять фрагменты текста " & i
                 oSel3.InsertBreak 6
     Next
End Sub

Тут используется цикл for для вставки нескольких фрагментов — «Урок 6 по VBScript: Циклы for…next и for each…next«.

//JScript
function Insert_Caption(){
oWord4.CaptionLabels.Add("Номер");
     for (i = 0; i<=10; i++){
                 oSel4.InsertCaption("Номер", "    выделение фрагмента текста " + i);
                 oSel4.InsertBreak(6);
     }
}

Тут тоже используется цикл for, но уже для JS кода — «Урок 9 по JScript — оператор цикла for«.

' VBA
oWord5.CaptionLabels.Add "Номер"
For i = 0 To 10
     oSel5.InsertCaption Label:="Номер", Title:="    Фраза VBA Selection " & i
     oSel5.InsertBreak wdLineBreak
Next

Обратите внимание, чтоимена переменных в примерах отличаются, это пришлось сделать с технических причин – в глазах поисковых систем статья становится заспамленой. Хорошо, давайте двигаться дальше.

Методы Insert… – выделение фрагментов текста в Word

как можно выделить фрагмент текста

InsertDateTime(DateTimeFormat) – Метод позволяет вставить дату или время в документ, или одновременно оба значения. Помимо параметра DateTimeFormat есть еще четыре, но они практически не используются.

DateTimeFormat – Необязательный параметр, позволяет указать формат даты и времени.

' VBScript
Sub Insert_Date
    With oSel4
        .Text = "как выделить фрагмент текста "
        .EndOf
        .InsertBreak 6
        .InsertDateTime
        .InsertBreak 6
        .InsertDateTime "MMMM dd, yyyy"
        .InsertBreak 6
        .InsertDateTime "MMMM dd, yyyy - H:M:S"
    End With
End Sub

Обратите внимание на оператор with, он позволяет не писать каждый раз имя класса.

//JScript
function Insert_Date(){
    with(oSel4){
        Text = " выделение фрагментов Word текста ";
        EndOf();
        InsertBreak(6);
        InsertDateTime();
        InsertBreak(6);
        InsertDateTime("MMMM dd, yyyy");
        InsertBreak(6);
        InsertDateTime("MMMM dd, yyyy - H:M:S");
    }
}

Тут логика работы аналогична.

' VBA
With oSel5
     .Text = " как выделить в Word фрагмент текста "
     .EndOf
     .InsertBreak wdLineBreak
     .InsertDateTime
     .InsertBreak wdLineBreak
     .InsertDateTime "MMMM dd, yyyy"
     .InsertBreak wdLineBreak
     .InsertDateTime "MMMM dd, yyyy - H:M:S"
End With

Хорошо, осталось рассмотреть последнюю третью часть статьи.

Методы Insert… – выделение фрагментов текста в Word

InsertFile(FileName) – Позволяет вставить содержимое указанного файла в документ, параметр FileName хранит имя или путь к файлу, если путь отсутствует, то будет подразумеваться текущий каталог.

InsertNewPage — Вставляет новую страницу в место, где находится указатель.

InsertParagraph— Заменяет выделение знаком абзаца.

InsertParagraphAfter— Вставляет знак абзаца после выделения .

InsertParagraphBefore— Вставляет новый абзац перед выделением.

Методы с префиксом Move… также встречаются едва ли не в любой программе, связанной с вводом текста в Word. Самые важные и удобные из этих методов:

MoveLeft(), MoveRight(), MoveUp(), MoveDown() – Методы дают возможность переместить курсор влево, вправо, вверх и вниз. Все четыре метода принимают следующие параметры (Unit, Count, Extend), являющиеся необязательными:

Unit — Блок, по которым выбор должен быть перемещен. Параметр Unit содержит значения константы wdUnits.

Count – Единица перемещения. Значение по умолчанию 1.

Extend — Может быть либо wdMove (по умолчанию) или wdExtend.

MoveEnd(), MoveStart() – Перемещение курсора в конец или начало выделения, параметры — Unit, Count.

MoveStartUntil(), MoveStartWhile(), MoveEndUntil(), MoveEndWhile() – Позволяют переместить курсор к заданному символу или последовательности символов. Параметры Cset (обязательный) и Count (дополнительный):

Cset — Один или несколько символов. Аргумент является чувствительным к регистру.

Count – Задает целое или отрицательное значение, на которое происходит перемещение курсора.

Move(Unit, Count) – Фактически, тут мы может указать направление (Count) и текстовую единицу (Unit).

Логика работы для следующих примеров остается та же – меняется только код вызываемой процедуры. Фактически, код для языка VBScript и VBA является идентичным.

' VBScript
Sub Get_Move()
With oSel6
     ' вставляем в документ фразу сто раз
     For i = 0 To 10
                 .Text = "как выделить фрагменты нужного текста "
                 ' Перемещаем курсор в конец
                 .EndOf
     Next
 
     For i = 0 To 300
                 .MoveLeft
     Next
 
     For i = 0 To 100
                 .MoveRight
     Next
 
     For i = 0 To 4
                 .MoveUp
     Next
 
     .MoveStartUntil "Word"
 
     For i = 0 To 15
                 .Move 2, 5
     Next
End With
End Sub

Видим, что в данном коде мы использовали несколько операторов for.

//JScript
function Get_Move(){
with(oSel6){
     for (i=0; i<=10; i++){
                 .Text = "Текстовая строка: выделение фрагментов текста  ";
                 .EndOf();
     }
 
     for (i=0; i<= 300; i++){ .MoveLeft(); }
     for (i=0; i<= 100; i++){ .MoveRight(); }
     for (i=0; i<= 4; i++){ .MoveUp(); }
     .MoveStartUntil("Word");
     for (i=0; i<= 15; i++){ .Move(2, 5); }
}
}

Обратите внимание на приведенные в самом начале статьи примеры кода для языков VBA и VBScript, в макросе мы можем использовать именованные константы объекта Word, но в теле Windows Script Host сценария нет, так как там они не доступны. Описание свойств класса Selection я рассмотрел в этой статье.

Понравилась статья? Поделить с друзьями:
  • Vba вставить разрыв страницы word
  • Vba word цвет шрифта
  • Vba время в формате excel
  • Vba word цвет фона
  • Vba включить макрос excel