- Документы 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
Для того, чтобы перенести этот программный код на свой компьютер, наведите курсор мыши на поле с программным кодом, нажмите на одну из двух кнопкок в правом верхнем углу этого поля, скопируйте программный код и вставьте его в модуль проекта на своем компьютере (подробнее о том, как сохранить программный код макроса).
Макрос, запускающий 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 |
Уважаемые форумчане — помогите написать макрос. P.S. перечитал много похожих тем, не нашел подходящего макроса |
KuklP Пользователь Сообщений: 14868 E-mail и реквизиты в профиле. |
Про инструмент Слияние слышали? Я сам — дурнее всякого примера! … |
shanemac Пользователь Сообщений: 245 |
-замените вставки 1,2,……10 на [1] ….. [2] …. [10] чтобы 1 и 10 не путались |
{quote}{login=KukLP}{date=06.03.2012 06:55}{thema=}{post}Про инструмент Слияние слышали?{/post}{/quote} не разобрался в этом :((( |
|
9107 Пользователь Сообщений: 97 |
{quote}{login=shanemac}{date=06.03.2012 07:41}{thema=WORD V EXCEL}{post}-замените вставки…{/post}{/quote} |
вы же напишите все это для вашего варианта условные номера вставок, а предлагаемые вам поля |
|
9107 Пользователь Сообщений: 97 |
Да не заменить. Это номера. Какую чейку куда надо в ворде поставить |
это еще и якорек достаточно часто применяла данный прием, чтобы не возиться с закладками при формировании бланка на текущую строку не люблю закладки и метод слияния —слепые они, в нормальном состоянии ворд-документа все наглядно————————— |
|
9107 Пользователь Сообщений: 97 |
вот набросал макрос (из примеров). Где то вкралась ошибка…. Помогите найти. |
ran Пользователь Сообщений: 7091 |
|
9107 Пользователь Сообщений: 97 |
#12 09.03.2012 12:38:43 Спасибо, помогло!!!! |
Soferon 4 / 4 / 1 Регистрация: 22.06.2015 Сообщений: 98 |
||||||
1 |
||||||
Копирование таблицы из экселя в ворд07.09.2016, 11:28. Показов 13046. Ответов 20 Метки нет (Все метки)
Добрый день, помогите реализовать. такую фишку.
Вложения
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
07.09.2016, 11:42 |
2 |
|||
Так подойдёт ?
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, подумал над проблемой, можешь помочь с написанием кода. вот не много по другому записал ваш код. тоже рабочий до сохранения документа.
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 как решение Решение
P.S. В Вашей версии действительно наличествует несовпадение высоты строк, причём, довольно существенное. Workaround прилагается :
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»
0 |
pashulka 4131 / 2235 / 940 Регистрация: 01.12.2010 Сообщений: 4,624 |
||||
16.09.2016, 12:11 |
15 |
|||
Например :
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 |