Макрос excel в ворд

  • Документы Word
  • Создание файлов
  • Работа с файлами

Таблица Excel с исходными данными для создания документов Word

Макрос предназначен для программного создания документов Word на основе шаблона

(без использования функции слияния в Word)

В прикреплённом к статье архиве находятся 2 файла:

  • шаблон договора в формате Microsoft Word (расширение .dot)
  • файл Excel с макросом

Настройки макроса задаются в коде:

Const ИмяФайлаШаблона = «шаблон.dot»
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = «.doc»

При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста («кода поля») из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)

Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)

Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc

PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, — так что код недостаточно универсален.

Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))

Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.

В надстройке — много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.

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

Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.

Есть новая (универсальная) версия, — в которой уже есть практически всё, что может понадобиться.

  • 197090 просмотров

Не получается применить макрос? Не удаётся изменить код под свои нужды?

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

Вставка таблицы Excel в документ Word с помощью кода VBA Excel. Метод Selection.PasteExcelTable: синтаксис, параметры, пример использования.

Работа с Word из кода VBA Excel
Часть 6. Вставка таблицы Excel в документ Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]

Метод Selection.PasteExcelTable

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

Selection.PasteExcelTable — это метод, предназначенный для вставки Excel-таблицы из буфера обмена в документ Word и ее форматирования в соответствии с заданными параметрами.

Синтаксис

Expression.PasteExcelTable(LinkedToExcel, WordFormatting, RTF)

Expression — переменная, представляющая объект Selection. В том числе, это может быть курсор или закладка.

Параметры

Все параметры метода Selection.PasteExcelTable логического типа и являются обязательными.

Параметр Описание
LinkedToExcel True — вставленная таблица связывается с исходным файлом Excel, чтобы изменения, внесенные в файл Excel, отображались в Microsoft Word.
False — связь между вставленной таблицей и таблицей в исходном файле не устанавливается.
WordFormatting True — вставленная таблица будет отформатирована как таблица документа Word.
False — вставленная таблица будет отформатирована в соответствии с исходным файлом Excel.
RTF True — Excel-таблица будет вставлена в расширенном текстовом формате (RTF).
False — Excel-таблица будет вставлена в формате HTML-таблицы.

Допустим, у нас есть таблица Excel, начинающаяся с ячейки A1 (или с любой другой), и нам необходимо скопировать эту таблицу в существующий документ Word, вставив ее на место закладки «Закладка1».

Решение:

Sub Primer()

Dim myWord As New Word.Application, myDoc As Word.Document

‘Открываем существующий документ Word

Set myDoc = myWord.Documents.Open(«C:ТестоваяДокумент1.docx»)

‘Копируем таблицу на активном листе в буфер обмена

‘Вместо ячейки Range(«A1») можно указать любую другую, расположенную внутри таблицы

Range(«A1»).CurrentRegion.Copy

‘Вставляем таблицу из буфера обмена на место закладки

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

‘Отображаем программу Word

myWord.Visible = True

‘Очищаем переменные

Set myWord = Nothing

Set myDoc = Nothing

End Sub

Если необходимо таблицу вставить в конец документа, строку

myDoc.Bookmarks(«Закладка1»).Range.PasteExcelTable False, False, False

следует заменить на

With myDoc

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Добавляем перенос строки, если необходимо

    .ActiveWindow.Selection.InsertAfter vbCr

    ‘Переводим курсор в конец документа

    .Range(.Range.Characters.Count 1, .Range.Characters.Count 1).Select

    ‘Вставляем таблицу из буфера обмена

    .ActiveWindow.Selection.PasteExcelTable False, False, False

End With


Если есть необходимость обратиться к данным, хранящимся в текстовом файле приложения Word, или наоборот, передать данные из Excel в такой файл, то возникнет необходимость запуска приложения, в формате которого сохранен файл. Ниже приведен программный код макроса VBA для Microsoft Excel, запускающий приложение Word.

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

Sub Zapusk_Word_iz_Excel_01()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Add
            objWrdApp.Visible = True
        End If
    Set objWrdDoc = objWrdApp.Documents.Add
    Set objWrdDoc = Nothing
    Set objWrdApp = Nothing
End Sub

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

Макрос, запускающий Word из Excel и открывающий существующий документ

Если для передачи данных из Word в Excel, необходимо открыть файл с заданным именем, то можно использовать аналогичный код, в котором вместо добавления нового документа открывается документ существующий: 

Sub Zapusk_Word_iz_Excel_02()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
            objWrdApp.Visible = True
        End If
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    Set objWrdDoc = Nothing
    Set objWrdApp = Nothing
End Sub

При копировании этого кода на свой компьютер, не забудьте изменить путь к файлу и его имя. Запуск приложения можно сделать невидимым, если в коде изменить True на False.

Макрос для передачи данных из Excel в Word

Ниже приведен программный код макроса, копирующий в активной рабочей книге Excel диапазон с данными A1:E2 и вставляющий его в открытый документ Word. После передачи данных из Excel в Word производится закрытие документа с сохранением изменений и выход из приложения.

Sub Peredacha_Dannyh_iz_Excel_v_Word()
    Dim objWrdApp As Object
    Dim objWrdDoc As Object
    On Error Resume Next
    Set objWrdApp = GetObject(, "Word.Application")
        If objWrdApp Is Nothing Then
            Set objWrdApp = CreateObject("Word.Application")
            Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
            objWrdApp.Visible = False
        End If
    Set objWrdDoc = objWrdApp.Documents.Open("C:Doc1.doc")
    Range("A1:E2").Copy
    objWrdDoc.Range(0).Paste
    objWrdDoc.Close True
    'True - с сохранением, False - без сохранения
    objWrdApp.Quit
    Set objWrdDoc = Nothing
    Set objWrdApp = Nothing
End Sub

Другие материалы по теме:

 

9107

Пользователь

Сообщений: 97
Регистрация: 01.01.1970

Уважаемые форумчане — помогите написать макрос.  
В одной папке находятся файлы Excel и Word. Файл Word как шаблон. Необходимо перенести определенные ячейки в вордовский файл (предварительно открыв его) в строго определенное место. Нужен макрос в Excel — при нажатии на кнопку переносит из ячеек (А1 — в ворд 1, А2 — в ворд 2 и т.д) как текст. Файл ворд  в той же папке, вставить все значения из excel, распечатать и закрыть файл ворд.  
Подскажите, кто понимает как сделать.  

  P.S. перечитал много похожих тем, не нашел подходящего макроса :(

 

KuklP

Пользователь

Сообщений: 14868
Регистрация: 21.12.2012

E-mail и реквизиты в профиле.

Про инструмент Слияние слышали?

Я сам — дурнее всякого примера! …

 

shanemac

Пользователь

Сообщений: 245
Регистрация: 25.12.2012

-замените вставки 1,2,……10  

  на [1] ….. [2] …. [10]

  чтобы 1 и 10 не путались

 

{quote}{login=KukLP}{date=06.03.2012 06:55}{thema=}{post}Про инструмент Слияние слышали?{/post}{/quote}  

  не разобрался в этом :(((  
Да и будет куча похожих файлов эксель а на печать выводится в одном файле ворд. МАкрос нужен….

 

9107

Пользователь

Сообщений: 97
Регистрация: 01.01.1970

{quote}{login=shanemac}{date=06.03.2012 07:41}{thema=WORD V EXCEL}{post}-замените вставки…{/post}{/quote}  
как??? не понял…

 

вы же напишите  
-заменить 1 на дддддд  
-заменится 1, будет дддддд  
-но заменится и 1 в 10, будет ддддд0  
-у вас похоже в начале дата, номер  
-они тоже заменятся , если встретится 1  

  все это для вашего варианта  условные номера вставок, а предлагаемые вам поля

 

9107

Пользователь

Сообщений: 97
Регистрация: 01.01.1970

Да не заменить. Это номера. Какую чейку куда надо в ворде поставить

 

это еще и якорек  
-в екселе прочел строку 1—-с номерком 1 и значением дддд, запомнил дддд  
-в ворде    
  заменил вхождение [1] на дддд
— и пошел на очередную строку екселя  

  достаточно часто применяла данный прием, чтобы не возиться с закладками при формировании бланка на текущую строку  

  не люблю закладки и метод слияния —слепые они, в нормальном состоянии ворд-документа    
-не видно мест вставки  
-часто надо вставить некий текст 2-5 мест(например плательщика или дату)  
-шаблон ворда помещаю в некий каталог, пишу макросы в екселе относительно текущей ячейки (соответствует полю 1) для строки(обычный случай) и столбца(как у вас)  
-положение шаблона и его имя прописываю в ячейке екселя  

  все наглядно—————————

 

9107

Пользователь

Сообщений: 97
Регистрация: 01.01.1970

вот набросал макрос (из примеров). Где то вкралась ошибка…. Помогите найти.

 

ran

Пользователь

Сообщений: 7091
Регистрация: 21.12.2012

 

9107

Пользователь

Сообщений: 97
Регистрация: 01.01.1970

#12

09.03.2012 12:38:43

Спасибо, помогло!!!!

Soferon

4 / 4 / 1

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

Сообщений: 98

1

Копирование таблицы из экселя в ворд

07.09.2016, 11:28. Показов 13046. Ответов 20

Метки нет (Все метки)


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

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

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
Sub ЭкспортВВОРД()
 
 
Dim adr As String
Dim copyTABL As Object
    
    adr = ActiveWorkbook.Path
 
ActiveWindow.SmallScroll Down:=27 
Range("A1:C39").Select
ActiveWindow.SmallScroll Down:=-39
Selection.Copy
 
Set oWord = CreateObject("Word.Application") 
    oWord.Visible = True
Set oDoc = oWord.Documents.Add()
    oDoc.Activate
    
    Selection.Paste 
    MyRange.Collapse Direction:=wdCollapseStart
    MyRange.Paste
   
 
End Sub

Вложения

Тип файла: rar Расчет и маршруты.rar (17.4 Кб, 21 просмотров)



0



pashulka

4131 / 2235 / 940

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

Сообщений: 4,624

07.09.2016, 11:42

2

Так подойдёт ?

Visual Basic
1
2
3
4
5
6
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable
     .Parent.Visible = True
End With
Application.CutCopyMode = False



1



4 / 4 / 1

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

Сообщений: 98

07.09.2016, 14:45

 [ТС]

3

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



0



4131 / 2235 / 940

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

Сообщений: 4,624

07.09.2016, 15:31

4

В Word при масштабе 100% отличий(растягиваний) — не заметил.



0



4 / 4 / 1

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

Сообщений: 98

07.09.2016, 15:45

 [ТС]

5

растягивание по вертикали. в общем должно вылезти на 1 лист.



0



4131 / 2235 / 940

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

Сообщений: 4,624

07.09.2016, 17:04

6

Если после копирования нельзя изменить высоту строк в таблице, то можете попробовать копировать рисунок и вставить не таблицу, а скриншот.



0



Soferon

4 / 4 / 1

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

Сообщений: 98

08.09.2016, 09:31

 [ТС]

7

pashulka, подумал над проблемой, можешь помочь с написанием кода.
задумка такая. создаем новый документ, далее сохраняем его в папку с экселевским документом. запускаем макрос созданный (записанный в ворде на форматирование текста) сохраняем изменения и закрываем документ.

вот не много по другому записал ваш код. тоже рабочий до сохранения документа.

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 ÝêñïîðòÂÂîðä()
 
Dim adr As String
Dim AppWord As Object
Dim oDoc As Object
 
adr = ActiveWorkbook.Path
 
Range("A1:C39").Copy
 
Set AppWord = CreateObject("Word.Application")
AppWord.Visible = True
AppWord.Documents.Add
AppWord.Selection.Paste
AppWord.Activate
 
'ChangeFileOpenDirectory "adr"
    ActiveDocument.SaveAs Filename:="Îò÷åò î ïðîåçäå", FileFormat:= _
        wdFormatXMLDocument, LockComments:=False, Password:="", AddToRecentFiles _
        :=True, WritePassword:="", ReadOnlyRecommended:=False, EmbedTrueTypeFonts _
        :=False, SaveNativePictureFormat:=False, SaveFormsData:=False, _
        SaveAsAOCELetter:=False
    MsgBox ("Ôàéë ñîõðàíåí íà ðàáî÷èé ñòîë ïîä èìåíåì " & " '" & adr & " ' ")
 
 
    
 
Application.CutCopyMode = False
 
End Sub



0



4131 / 2235 / 940

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

Сообщений: 4,624

08.09.2016, 10:44

8

Где макрос, который, цитирую «записанный в ворде на форматирование текста»



0



4 / 4 / 1

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

Сообщений: 98

08.09.2016, 12:32

 [ТС]

9

еще не записал. его. записать то не долго, а потом запустить. пока бьюсь с проблемой сохранения..



0



pashulka

4131 / 2235 / 940

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

Сообщений: 4,624

08.09.2016, 13:34

10

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

Решение

Visual Basic
1
2
3
4
5
6
7
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.PasteExcelTable False, False, True '.Range.Paste
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False

P.S. В Вашей версии действительно наличествует несовпадение высоты строк, причём, довольно существенное. Workaround прилагается :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable False, False, True
     With .Tables(1)
          .Rows.HeightRule = 2 'wdRowHeightExactly
          For i = 1 To 39
              .Rows(i).Height = Rows(i).Height
          Next
     End With
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False



1



4 / 4 / 1

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

Сообщений: 98

08.09.2016, 17:14

 [ТС]

11

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



0



4 / 4 / 1

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

Сообщений: 98

08.09.2016, 17:15

 [ТС]

12

вордовский документ



0



4131 / 2235 / 940

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

Сообщений: 4,624

08.09.2016, 18:05

13

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

Решение

Смотрите аттач, только перед тестированием, не забудьте указать свою почту.



1



Soferon

4 / 4 / 1

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

Сообщений: 98

16.09.2016, 11:33

 [ТС]

14

Что добавить в ваш код чтобы документ сохранялся со шрифтом «Times New Roman»

PureBasic
1
2
3
4
5
6
7
8
9
10
11
12
13
Range("A1:C39").Copy
With CreateObject("Word.Application").Documents.Add
     .Range.Paste '.Range.PasteExcelTable False, False, True
     With .Tables(1)
          .Rows.HeightRule = 2 'wdRowHeightExactly
          For i = 1 To 39
              .Rows(i).Height = Rows(i).Height
          Next
     End With
     .SaveAs Filename:=ActiveWorkbook.Path & "Имя_документа.docx", FileFormat:=12 'wdFormatXMLDocument
     .Parent.Visible = True
End With
Application.CutCopyMode = False



0



pashulka

4131 / 2235 / 940

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

Сообщений: 4,624

16.09.2016, 12:11

15

Например :

Visual Basic
1
2
With .Tables(1)
     .Range.Font.Name = "Times New Roman"



1



4 / 4 / 1

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

Сообщений: 98

16.09.2016, 12:39

 [ТС]

16

Спасибо работает.



0



4 / 4 / 1

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

Сообщений: 98

27.09.2016, 13:02

 [ТС]

17

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



0



4131 / 2235 / 940

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

Сообщений: 4,624

27.09.2016, 14:58

18

Soferon, Об’единённые ячейки — это зло, тем паче в Word. Если исправите вторую таблицу, то получите необходимый результат, если нет, то после копирования второй таблицы, получите ошибку «Отсутствует доступ к отдельным строкам, поскольку таблица имеет ячейки, объединенные по вертикали.»



0



4 / 4 / 1

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

Сообщений: 98

27.09.2016, 15:43

 [ТС]

19

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



0



4131 / 2235 / 940

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

Сообщений: 4,624

27.09.2016, 20:27

20

Проблем, связанных с копированием с разных листов, особо не наблюдается (см.пример)



1



Понравилась статья? Поделить с друзьями:
  • Макрос excel в exe
  • Макрос excel range value
  • Макрос excel if then else
  • Макрос as excel application
  • Макрос and excel свойства