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

0 / 0 / 0

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

Сообщений: 3

1

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


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

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



0



Programming

Эксперт

94731 / 64177 / 26122

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

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

05.10.2012, 18:42

64

5468 / 1148 / 50

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

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

07.11.2012, 20:35

21

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

evavdeev, у вас дело в том (сам только что узнал), что при вставке текста в закладку, закладка удаляется.

Есть 2 вида закладок:

  1. в виде вертикальной черты;
  2. в виде квадратных скобок.

Закладка в виде вертикальной черты получается, если при вставке закладки, нет выделения текста.
Закладка в виде двух квадратных скобок получается, если при вставке закладки выделелен текст.

При вставке данных в закладку в виде вертикальной черты — закладка не удаляется, а при вставке данных в закладку в виде квадратных скобок, закладка удаляется.

Т.е. вывод какой? Вам надо сделать одного вида все закладки в шаблоне. Если закладки будут в виде вертикальной черты, то в коде VBA надо добавить команды по удалению закладок. Если закладки будут в виде квадратных скобок, то команды в коде VBA по удалению закладок не нужны.



2



evavdeev

1 / 1 / 0

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

Сообщений: 6

08.11.2012, 09:08

22

Разобрался… вроде все перед глазами, а сам не заметил…

Visual Basic
1
2
3
    oDoc.Bookmarks(sBookmark_address).Delete
    oDoc.Bookmarks(sBookmark_idn).Delete
    oDoc.Bookmarks(sBookmark_sn).Delete

Все работает. Большое спасибо за помощь!

Добавлено через 4 минуты

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

Есть 2 вида закладок

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



0



159 / 0 / 1

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

Сообщений: 2

18.06.2013, 17:33

23

Здравствуйте! Решилась вот к Вам обратиться с мольбой о помощи. я лишь начинаю программировать. В данный момент занимаюсь разработкой информационной системы для оценки рейтинга на VBA в Excel. По началу проблем не было,но сейчас возникла проблема с записью результатов с excel в документ word. впервые с этим столкнулась. Наткнулась на этот форум. скачала — Задачи-VBA-57.zip, попыталась разобраться. вроде работает,а под свою прогу не могу подстроить( меня бы немного направить в нужное русло,а там сама все сделаю.

в папке ИС нужно открыть anketaа.xls. в редакторе VBA у меня много форм,не обращайте внимания,там остальное будет. пока используем первые три формы,которые во время запуска макроса переходят одна в другую. третья переходит в 29-ю, в ней нажимаем на кнопку Анализировать и попадаем на 30-ю форму, после нажатия на нее прога считает то,что мне нужно. до этого момента все нормально. дальше нужно вставить в документ Шаблон.doc в нужные места соответствующие значения,либо по этому шаблону новый документ создать и уже туда вставить значения нужные.
Вообщем,запнулась(
прошу не ругать за простоту кода)))

Вложения

Тип файла: rar ИС.rar (49.1 Кб, 123 просмотров)



0



159 / 0 / 1

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

Сообщений: 2

19.06.2013, 09:04

24

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

Решение

отвечать не надо. сама сделала)



0



11482 / 3773 / 677

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

Сообщений: 11,145

19.06.2013, 09:47

25

Ошибочно



0



ihaustov

21.06.2013, 17:05

26

Подскажите, пожалуйста, как сделать несколько документов на основе нескольких шаблонов из одной таблицы Excel по принципу, описанному выше?

Hugoman

0 / 0 / 0

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

Сообщений: 8

09.08.2013, 14:04

27

Добрый день дорогие форумчане!
Создаю макрос на экспорт данных из Exel (определенная таблица) в определенный шаблон Word (в область закладки) и как раз нашел похожий макрос написананный форумчанином «Скрипт» и взял его за основу. Но не смог подогнать под свои условия. Помогите, пожалуйста дорогие форумчане подкорректировать текст макроса. Не выдает желанного результата.
Вот что получилось:

PureBasic
1
2
3
4
5
6
7
8
9
Sub Экспорт ()
               Сonst a as String = "D:ДСПшаблоны(таблица)клиентШаблонКлиента.doc"
               Сonst a as String = "D:ДСПшаблоны(таблица)клиентклиент.doc"
               Const sBook_1 As String="закладка_1"
               Dim oDocument as Word.Application
               FileCopy Source:= a, Destination:=b
               Set oDocument = Documents.Open (filename:=b)
               oDocument.Bookmarks.Item (sBook_1).Range.Text = Range ("A1:F44") -   [I][этой строкой хотел вставить на место закладки таблицу из Exel [/I]
               Enn Sub



0



Hugo121

6875 / 2807 / 533

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

Сообщений: 8,562

09.08.2013, 15:18

28

Visual Basic
1
2
Сonst a
Сonst a

?



0



Hugoman

0 / 0 / 0

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

Сообщений: 8

09.08.2013, 15:28

29

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

Visual Basic
1
2
Сonst a
Сonst a

?

Спасибо огромное за то что заметили, но это я ошибся когда переписывал код макроса на форум.
При запуске макроса программа жалуется на строку
«oDocument.Bookmarks.Item (sBook_1).Range.Text = Range («A1:F44″)», Пишет что «Method or data member not found» и подчеркивает «Bookmarks»



0



Hugo121

6875 / 2807 / 533

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

Сообщений: 8,562

09.08.2013, 17:24

30

Я думаю ошибка тут:

Visual Basic
1
Set oDocument = Documents.Open (filename:=b)

вот проверенный пример (код в Экселе):

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
Sub Макрос1()
 
Dim sOM As String, sDocNum As String
Dim WordApp As Object
 
    sOM = "G:. ШаблоныПостановление.doc"
    xData = Range("A1").Value
    xFIO = Range("A2").Value
    xS = Range("A3").Value
    xAdr = Range("A4").Value
    xVidIs = Range("A5").Value
    
    'sOM = Range("B9").Value
    'sDocNum = Range("B11").Value
    On Error Resume Next
    Set WordApp = GetObject(, "word.application")
    If WordApp Is Nothing Then
        Set WordApp = CreateObject("word.application")
    End If
    On Error GoTo 0
    With WordApp
        .Visible = True
        .Documents.Open Filename:=sOM
    End With
    WordApp.ActiveDocument.Bookmarks("vData").Range.Text = xData
    WordApp.ActiveDocument.Bookmarks("vFIO").Range.Text = xFIO
    WordApp.ActiveDocument.Bookmarks("vS").Range.Text = xS
    WordApp.ActiveDocument.Bookmarks("vAdr").Range.Text = xAdr
    WordApp.ActiveDocument.Bookmarks("vVidIs").Range.Text = xVidIs
    Set WordApp = Nothing
 
End Sub

Код берет из Excel данные ячеек и вставляет их в закладки в Word.



1



korvindeson

1261 / 147 / 32

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

Сообщений: 418

09.08.2013, 18:05

31

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

Решение

Ещё вариант через HTML. Вот пример если заявления клипать

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
'начинаем запись в файл, создаём в той же папке, название ячейка (1,1)
Open ThisWorkbook.Path & "" & Cells(1, 1).Value & ".doc" For Output As #1
            
'заголовок html
            Print #1, "<HTML>"
            Print #1, "<meta http-equiv=Content-Type content=""text/html; charset=windows-1251"">"
            Print #1, "<style type='text/css'>"
            Print #1, "p{font-family:times new roman;font-size:14pt;}"
            Print #1, "h2{font-family:times new roman;font-size:14pt;}"
            Print #1, "c{font-family:times new roman;font-size:14pt;color:orange;}"
            Print #1, "</style>"
            Print #1, "<body>"
 
                        Print #1, "<P ALIGN=RIGHT>"; "В какую нибудь организацию"
                        Print #1, "<br>"; "даже с очень длинным названием"
                        Print #1, "<br>"; "от "; Cells(2, 1); "."                  'В ячейке (2,1) предположительно от кого заявление
                        Print #1, "<br>";
                        Print #1, "<br>"
                        Print #1, "<br>"
                        Print #1, "<br>"
                        Print #1, "<br>"
                        Print #1, "<br>"; "<H2 align=center>"; "Заявление"; "</h2>"
                        Print #1, "<br>"; "<p>"
                        Print #1, "<br>"; "Заявляю"; "<p>"
                        Print #1, "<br>"; "<p style=color:white>"; Chr(12); "-"; "</p>"              'Переход на новую страницу
 
'закрываем хэдэр
            Print #1, "</body>"
            Print #1, "</HTML>"
 
'закрываем файл
            Close #1

Вот, таким образом на мой вкус куда легче из экселя документы вертать потоком. Только если в таком варианте оставить, то при редактировании файлов и сохранении появляются папки с хтмл информацией, которые некоторых пугают Поэтому можно ещё вот такую функцию пользонуть, чтоб ворд под себя перекодировал.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub ProtToWord(ImyaFayla)
 
Set wa = CreateObject("Word.Application")
wa.Visible = False
 
Set wd = wa.Documents.Open(ImyaFayla)
 
wd.SaveAs2 Filename:=Left(ImyaFayla, Len(ImyaFayla) - 4) & "11111.doc", FileFormat:= _
                    wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
                    True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
                    False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
                    SaveAsAOCELetter:=False, CompatibilityMode:=0
wd.Close
wa.Quit
If Dir(PathName:=ImyaFayla) <> "" Then
    Kill (ImyaFayla)
End If
 
СтарыйПутьКФайлу = Left(ImyaFayla, Len(ImyaFayla) - 4) & "11111.doc"
НовыйПутьКФайлу = ImyaFayla
Name СтарыйПутьКФайлу As НовыйПутьКФайлу

Если брать первый пример, то можно пользовать как

Visual Basic
1
Call ProtToWord(ThisWorkbook.Path & "" & Cells(1, 1).Value & ".doc")

Если с ненужным лезу, ногами не бить



1



1 / 1 / 0

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

Сообщений: 58

12.08.2013, 14:24

32

А что означают знаки доллара и процента в Вашем коде программы?



0



Модератор

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

34709 / 19230 / 4040

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

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

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

12.08.2013, 14:40

33

$ — значит переменная имеет тип String; % — соотв. Integer



1



Hugoman

0 / 0 / 0

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

Сообщений: 8

12.08.2013, 15:20

34

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

Ещё вариант через HTML. Вот пример если заявления клипать

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
'начинаем запись в файл, создаём в той же папке, название ячейка (1,1)
Open ThisWorkbook.Path & "" & Cells(1, 1).Value & ".doc" For Output As #1
            
'заголовок html
            Print #1, "<HTML>"
            Print #1, "<meta http-equiv=Content-Type content=""text/html; charset=windows-1251"">"
            Print #1, "<style type='text/css'>"
            Print #1, "p{font-family:times new roman;font-size:14pt;}"
            Print #1, "h2{font-family:times new roman;font-size:14pt;}"
            Print #1, "c{font-family:times new roman;font-size:14pt;color:orange;}"
            Print #1, "</style>"
            Print #1, "<body>"
 
                        Print #1, "<P ALIGN=RIGHT>"; "В какую нибудь организацию"
                        Print #1, "<br>"; "даже с очень длинным названием"
                        Print #1, "<br>"; "от "; Cells(2, 1); "."                  'В ячейке (2,1) предположительно от кого заявление
                        Print #1, "<br>";
                        Print #1, "<br>"
                        Print #1, "<br>"
                        Print #1, "<br>"
                        Print #1, "<br>"
                        Print #1, "<br>"; "<H2 align=center>"; "Заявление"; "</h2>"
                        Print #1, "<br>"; "<p>"
                        Print #1, "<br>"; "Заявляю"; "<p>"
                        Print #1, "<br>"; "<p style=color:white>"; Chr(12); "-"; "</p>"              'Переход на новую страницу
 
'закрываем хэдэр
            Print #1, "</body>"
            Print #1, "</HTML>"
 
'закрываем файл
            Close #1

Вот, таким образом на мой вкус куда легче из экселя документы вертать потоком. Только если в таком варианте оставить, то при редактировании файлов и сохранении появляются папки с хтмл информацией, которые некоторых пугают Поэтому можно ещё вот такую функцию пользонуть, чтоб ворд под себя перекодировал.

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Sub ProtToWord(ImyaFayla)
 
Set wa = CreateObject("Word.Application")
wa.Visible = False
 
Set wd = wa.Documents.Open(ImyaFayla)
 
wd.SaveAs2 Filename:=Left(ImyaFayla, Len(ImyaFayla) - 4) & "11111.doc", FileFormat:= _
                    wdFormatDocument, LockComments:=False, Password:="", AddToRecentFiles:= _
                    True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts:= _
                    False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
                    SaveAsAOCELetter:=False, CompatibilityMode:=0
wd.Close
wa.Quit
If Dir(PathName:=ImyaFayla) <> "" Then
    Kill (ImyaFayla)
End If
 
СтарыйПутьКФайлу = Left(ImyaFayla, Len(ImyaFayla) - 4) & "11111.doc"
НовыйПутьКФайлу = ImyaFayla
Name СтарыйПутьКФайлу As НовыйПутьКФайлу

Если брать первый пример, то можно пользовать как

Visual Basic
1
Call ProtToWord(ThisWorkbook.Path & "" & Cells(1, 1).Value & ".doc")

Если с ненужным лезу, ногами не бить

А второй вариант, это я как понимаю на экспорт из exel в ворд? Если так, то можно в ваш макрос внедрить, экспорт из Exel определенного сегмента и вставка в определенное место вордовского документа!



0



1261 / 147 / 32

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

Сообщений: 418

12.08.2013, 17:02

35

Ниже, это не второй вариант. Просто открываем вордом сделаный вверху файл и пересохраняем вордом, чтоб он сохранялся по принципу doc а не html документов. Не обязательная штука, просто иначе будут папки появляться при изменении/сохранении документа



1



0 / 0 / 0

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

Сообщений: 5

21.08.2013, 12:22

36

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

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

Здравствуйте, Борис (Catstail). Воспользовавшись и немного видоизменив под свои нужды макрос в Вашем файле «Задачи-VBA-57a.xls» — получил в итоге рабочую форму для автозаполнения договоров в MS Word 2003, НО..столкнулся с непреодолимым препятствием в виде полностью разрушенного (включая таблицы) формата итогового документа. Плюс, не имея достаточных навыков работы в VBA, не могу сообразить, как реализовать в одном макросе ещё и заполнение табличных ячеек в вордовском документе данными из соответствующих ячеек файла эксель, поскольку Ваш макрос разработан для формирования договоров из данных, расположенных в ОДНУ СТРОКУ, а мне необходимо, помимо текста договора, автозаполнение таблицы, т.е. нескольких строк (данные столбцов: Q, R, S, T нужно как-то зациклить, допустим, до 26-й строки и поместить в таблицу ворд). Не могли бы Вы помочь мне разобраться с этой задачей. Файлы экселевского исходника и вордовского шаблона — прилагаю. Заранее благодарен.



0



Модератор

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

34709 / 19230 / 4040

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

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

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

21.08.2013, 17:54

37

Nosce te ipsum, почему рушится структура документа? Этого быть не должно. Вашу посылку скачал, но не понял, где там мой код. Пишите мне в почту — будем общаться.



0



0 / 0 / 0

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

Сообщений: 5

21.08.2013, 21:06

38

Catstail,

Добавлено через 4 минуты

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

Nosce te ipsum, почему рушится структура документа? Этого быть не должно. Вашу посылку скачал, но не понял, где там мой код. Пишите мне в почту — будем общаться.

Ещё раз, здравствуйте, Борис.
Спасибо за оперативный ответ.
По приведённой ниже ссылке в одном из Ваших постов прикреплён файл Задачи-VBA-57a.zip, который и был взят мной за основу (если сравнивать коды — видно, мой эдентичен Вашему):
Вставка текста из Excel в Word
С уважением,
Nosce te ipsum

p.s. Написал Вам в Скайп, поскольку почту не нашёл.

Добавлено через 7 минут
Да, кстати, Ваш код нужно смотреть на 4-м листе (Исходные данные из реквизитов)
С уважением,
Nosce te ipsum



0



Модератор

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

34709 / 19230 / 4040

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

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

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

21.08.2013, 21:09

39

Хорошо, завтра я все детально рассмотрю.



0



Модератор

Эксперт MS Access

11342 / 4661 / 748

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

Сообщений: 13,508

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

21.08.2013, 21:10

40

не тянет wdDoc.Range.Text = Replace$(wdDoc.Range.Text,



0



Александр спрашивает:

Как вставить (автоматически!) по всему документу в начале каждой строки один и тот же текст? Вручную это очень долго если документ много строк.

Можно воспользоваться следующим макросом для вставки некоего текста перед первым предложением каждого абзаца.

Sub insertBefore()
'Вставка текста из поля ввода перед каждым абзацем
Dim par As Paragraph
Dim Str As String
Str = InputBox("Введите текст", "Ввод текста в начало каждого абзаца")   'Диалог с полем ввода текста
For Each par In ActiveDocument.Paragraphs
   par.Range.insertBefore (Str & vbTab)   'Вставляем текст из поля ввода и добавляем табуляцию
Next
End Sub

Если вы не знаете, как подключить к документу и применить этот макрос, изучите следующие заметки с сайта:

Создание макроса из готового кода

Автоматическая запись макроса

March 21 2009, 23:37

Categories:

  • IT
  • Работа
  • Cancel

1. Установить куда-нибудь курсор;
2. Выбрать Вид->Макросы->Запись макроса;
3. Задать имя и сочетание клавиш или кнопку
4. Начать запись;
5. Выбрать Главная->Вставить->Специальная вставка->Неформатированный текст;
6. Закончить запись макроса;
//Можно проверить, что макрос точно не работает
7. Помянуть Microsoft плохим словом;
8. Открыть Вид->Макросы;
9. Выбрать нужный макрос->Изменить;
// Примерно такой:

Sub macros()
‘ macros Макрос
Selection.PasteAndFormat (wdPasteDefault)
End Sub

10. Открыть msdn и радостно обнаружить, что wdPasteDefault «Not supported» (как и что пишется в макросы – загадка);
11. Заменить wdPasteDefault на wdFormatPlainText;
// Вот так:

Sub macros()
‘ macros Макрос
Selection.PasteAndFormat (wdFormatPlainText)
End Sub

12. Сохранить.

Параллельно с этим обнаружить, что редактор Visual Basic помещает в буфер обмена содержимое в зависимости от текущей раскладки клавиатуры. Т.е. если хотите Copy — Paste русский текст, не забывайте выбирать русскую раскладку :)

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

Включение макроса в Word 2010
Перейдите на вкладку ленты Разработчик. Если этой вкладки на вашей ленте нет, откройте окно Параметры Word и на вкладке Основные установите флажок на параметре Показывать вкладку «Разработчик» на ленте.

Включение макроса в Word 2010

 На вкладке “Разработчик” в группе команд “Код” нажмите кнопку “Начать запись”. Откроется диалоговое окно Запись макроса.

 Для примера сделаем простую запись макроса, которая будет выполнять вставку текста в то место, где будет стоять курсор.
Запускаем запись макроса и в диалоговом окне пишем его название и описание, а так же выбираем доступ.

Запускаем запись макроса 
Нажмем ОК и начнется запись макроса.
Напечатаем текст и добавим ему цвет.

Создаем текст

 После чего нажмем “Остановить макрос”.
Для запуска макроса нужно нажать кнопку “Макросы” или комбинацию клавиш “Alt + F8”, так же макросу можно задать в личную комбинацию клавиш или вывести кнопку в меню.

Макрос

 Запустив окно “Макрос” выбираем нужный нам макрос и нажимаем выполнить, после чего он вставить в нужное нам место наш текст.

Создание макроса с помощью редактора Visual Basic for Applications (VBA).

Создадим простейший макрос, который будет позволять щелкать по гиперссылке в документе Word без нажатой клавиши Ctrl

Макросы для Word пишутся на языке программирования Visual Basic for Applications (VBA).
Макросы создаются в компоненте Word, который большинство пользователей никогда не видят, — в редакторе Visual Basic (VBE). Открыть редактор Visual Basic можно одним из указанных ниже способов.

  • Нажмите сочетание клавиш ALT + F11
  • Нажмите кнопку Visual Basic на вкладке Разработчик. Для этого откройте вкладку Файл и нажмите кнопку Параметры. В диалоговом окне Параметры Word нажмите кнопку Настройка ленты. В правой части диалогового окна выберите вкладку Разработчик. Нажмите кнопку ОК, чтобы вернуться к документу, а затем нажмите на вкладке Разработчик кнопку Visual Basic.
  • Добавление команды Visual Basic на панель быстрого доступа.

VBA 
Перед тем как приступить к работе с редактором Visual Basic, выберите в меню Сервис пункт Параметры. В диалоговом окне Параметры установите на вкладке Редактор все флажки.

В левом верхнем углу редактора Visual Basic расположено Окно проекта. В нем отображаются все файлы, открытые в Word в настоящий момент. Там должны отображаться файлы Normal (соответствующий шаблону Normal.dotm) и TheDocument (только что созданный файл).

На приведенном ниже рисунке показан проект TheDocument в окне проекта редактора Visual Basic.
В файле макросы хранятся в виде модулей. Чтобы добавить в файл модуль, выберите в окне проекта файл TheDocument. В меню Вставка выберите пункт Модуль. После добавлении модуля в файл этот модуль появится в окне проекта и в расположенном под ним окне свойств. В окне свойств модуль можно переименовать или оставить имя по умолчанию Module1.

VBA project

 Написание макроса

Большая белая область в правой части редактора Visual Basic предназначена для написания кода макроса. Если она не отображается, выберите в меню Вид пункт Код, чтобы вывести окно кода. Приложение Word автоматически вставит в начало кода оператор Option Explicit. Не удаляйте его.

Нам нужен макрос для переключения между двумя способами перехода по гиперссылке в Word. Он будет работать так же, как и другие кнопки, предназначенные для переключения между значениями параметра в Word. Кнопка Полужирный на вкладке «Главная», например, выделяет текст полужирным шрифтом, если он не был выделен, и отменяет полужирное начертание в противном случае.

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

Sub ToggleHyperlinkCtrlClick()
    Options.CtrlClickHyperlinkToOpen = Not Options.CtrlClickHyperlinkToOpen
End Sub

Это короткий макрос ToggleHyperlinkCtrlClick, состоящий только из одной строки кода. Эта строка означает «Изменить текущее значение параметра Word, определяющего необходимость использования сочетания CTRL + щелчок для перехода по гиперссылке, на противоположное (Not).

Пример кода

 Тестирование макроса

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

  1. Разместите окна Word и редактора Visual Basic рядом друг с другом.
  2. Щелкните главное окно Word. Введите в документ http://google.com
  3. В редакторе Visual Basic щелкните в любом месте макроса. Чтобы запустить макрос, выберите в меню Выполнить команду Выполнить процедуру/форму пользователя или нажмите клавишу F5.
  4. Значение параметра, определяющего способ перехода по гиперссылке, изменится. Наведите указатель мыши на гиперссылку в главном окне Word и убедитесь, что подсказка изменилась.
  5. Чтобы переключить значение, запустите макрос повторно.

Тестирование 

Макрос также можно запустить непосредственно в приложении Word. На вкладке Вид в группе Макросы нажмите кнопку Макросы. Откроется диалоговое окно Макрос, где в списке макросов будет и макрос ToggleHyperlinkCtrlClick. Чтобы запустить ваш макрос, щелкните его имя и нажмите кнопку Выполнить.

Создание на панели быстрого доступа кнопки для запуска макроса
Чтобы запускать макрос одним щелчком мыши, можно добавить кнопку на панель быстрого доступа. Для этого выполните указанные ниже действия.

Создание кнопки на панели быстрого доступа

  1. Щелкните панель быстрого доступа правой кнопкой мыши и выберите в контекстном меню команду Настройка панели быстрого доступа. В разделе Настройка панели быстрого доступа выберите в списке Выбрать команды из пункт Макросы. В списке «Настройка панели быстрого доступа» выберите файл MyWordTools.dotm. (Это необходимо, чтобы приложение Word сохранило кнопку на панели быстрого доступа в файле MyWordTools.dotm. Если этого не сделать, при копировании файла на другой компьютер кнопка отображаться не будет.) Выберите макрос ToggleHyperlinkCtrlClick и нажмите кнопку Добавить.
  2. Нажмите кнопку Изменить, чтобы выбрать символ и изменить имя на ToggleHyperlinkCtrlClick.
  3. Теперь макрос можно запустить в любой момент, нажав кнопку на панели быстрого доступа.

Дабвление иконки 
Макросы Word могут быть длинными, сложными и многофункциональными. Например, можно написать макрос для обращения к внешней базе данных, выполнения с полученными данными определенных вычислений и возврата результатов в Word. Также можно написать макрос Word для взаимодействия с Excel, PowerPoint или Outlook. В некоторых случаях и простые макросы могут оказаться полезными, позволяя сэкономить время.

Для форматирования текста больше подходят стили, чем макросы. Для изменения макета документа лучше создать новый шаблон. Кроме того, для выполнения поставленной задачи уже может существовать встроенная команда, которую можно добавить на панель быстрого доступа (при настройке панели быстрого доступа выберите в списке Выбрать команды из: пункт Все команды).

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

  • Откройте диалоговое окно Параметры Word.
  • Перейдите на закладку Настройка ленты и выбираем в командах: Макросы.
  • Потом выбираем наш макрос и с низу жмем сочетание клавиш – настройки.
  • В диалоговом окне настройки клавиатуры выбираем в категории макросы и в окне макросы выбираем нужный нам макрос.
  • Щелкаем в новое сочетание клавиш и жмем на клавиатуре нужную нам комбинацию.
  • Жмем назначить и ок

 
Cочетания клавиш

Примеры кодов:
Удаление лишних пробелов в тексте без использования диалогового окна “Найти и заменить”

Sub ReplaceMultiSpaces()
Dim oChar As Range
For Each oChar In ActiveDocument.Characters
If oChar.Text = » » Then
While oChar.Next(wdCharacter).Text = » «
oChar.Next(wdCharacter).Delete
Wend
End If
Next
End Sub

Расположение двух открытых документов Word рядом

Sub ArrangeDocWindows()
‘ ArrangeDocWindows Macro
‘ Arranges two document windows side by side vertically
Dim iMiddle     As Integer
Dim iClientWid  As Integer
Dim iClientHi   As Integer
Dim iWin1       As Integer
Dim iWin2       As Integer
Dim sPrompt     As String
Dim sWins       As String
Dim i           As Integer   
iClientWid = Application.Width — 9
iMiddle = Fix((iClientWid) / 2)
iClientHi = Application.Height — 94    
iWin1 = 1
iWin2 = 2
If Application.Windows.Count > 2 Then
For i = 1 To Application.Windows.Count
sPrompt = sPrompt & CStr(i) & » — » & Application.Windows(i).Caption & vbLf
Next
sWins = InputBox(«Enter numbers of windows to arrange separated by space.» & vbLf & sPrompt, _
«Choose windows», «1 2»)
If sWins = «» Then
Exit Sub
End If
iWin1 = CInt(Left(sWins, InStr(sWins, » «) — 1))
iWin2 = CInt(Mid(sWins, InStr(sWins, » «) + 1))
End If   
Application.Windows(iWin1).Activate
Application.Windows(iWin1).WindowState = wdWindowStateNormal
With ActiveWindow
.Left = 0
.Top = 0
.Height = iClientHi
.Width = iMiddle
End With   
Application.Windows(iWin2).Activate
Application.Windows(iWin2).WindowState = wdWindowStateNormal
With ActiveWindow
.Left = iMiddle
.Top = 0
.Height = iClientHi
.Width = iClientWid — iMiddle
End With
End Sub
Обратите внимание, что если у вас будет открыто только одно окно, то после нажатия этой кнопки может появиться окно с сообщением редактора кода Visual Basic об ошибке. Закройте его нажав на кнопку End. А в следующий раз будьте внимательны.

Преобразование гиперссылки в документе Word в обычный текст

Sub RemoveHyperlinks()
While ActiveDocument.Hyperlinks.Count > 0
ActiveDocument.Hyperlinks(1).Delete
Wend
Application.Options.AutoFormatAsYouTypeReplaceHyperlinks = False
End Sub

Изменения цвета заглавных букв в тексте

Sub colorAllBig()
Dim fChar As Range
Dim seltext As Range
Dim i As Long
Set seltext = Selection.Range
If Selection.Type = wdSelectionIP Then
MsgBox «Выделите текст»
Else
For Each fChar In seltext.Words
For i = 1 To fChar.Characters.Count
If fChar.Characters(i).Case = wdUpperCase Then
fChar.Characters(i).Font.Color = wdColorRed
Else
fChar.Characters(i).Font.Color = wdColorBlack
End If
Next i
Next fChar
End If
End Sub

Понравилась статья? Поделить с друзьями:
  • Макрос на вставку текста excel
  • Макрос для удаления листа excel
  • Макрос для удаления картинок в excel
  • Макрос для удаление строки для word
  • Макрос для увеличения картинки в excel