- Документы 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 просмотров
Не получается применить макрос? Не удаётся изменить код под свои нужды?
Оформите заказ у нас на сайте, не забыв прикрепить примеры файлов, и описать, что и как должно работать.
Создание нового документа Word или открытие существующего из кода VBA Excel. Методы Documents.Add и Documents.Open. Сохранение и закрытие документа.
Работа с Word из кода VBA Excel
Часть 2. Создание и открытие документов Word
[Часть 1] [Часть 2] [Часть 3] [Часть 4] [Часть 5] [Часть 6]
Новый документ Word создается из кода VBA Excel с помощью метода Documents.Add:
Sub Test1() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = myWord.Documents.Add myWord.Visible = True End Sub |
Переменную myDocument можно объявить с типом Object, но тогда не будет ранней привязки к типу Word.Document и подсказок при написании кода (Auto List Members).
Открытие существующего документа
Существующий документ Word открывается из кода VBA Excel с помощью метода Documents.Open:
Sub Test2() Dim myWord As New Word.Application Dim myDocument As Word.Document Set myDocument = _ myWord.Documents.Open(«C:Документ1.docx») myWord.Visible = True End Sub |
Замените в этой процедуре строку «C:Документ1.docx» на адрес своего файла.
Подключение к открытому документу
Присвоение переменной ссылки на существующий экземпляр Word.Application осуществляется в VBA Excel с помощью функции GetObject:
Sub Test3() Dim myWord As Object, myDoc As Word.Document On Error GoTo Instr Set myWord = GetObject(, «Word.Application») Set myDoc = myWord.Documents(«Документ1.docx») myDoc.Range.InsertAfter «Добавляем новый текст, подтверждающий подключение к открытому документу.» Exit Sub Instr: MsgBox «Произошла ошибка: « & Err.Description End Sub |
Если открытого приложения Word нет, выполнение функции GetObject приведет к ошибке. Также произойдет ошибка, если не будет найден указанный документ (в примере — «Документ1.docx»).
Сохранение и закрытие документа
Сохранение нового документа
Чтобы сохранить из кода VBA Excel новый документ Word, используйте метод SaveAs2 объекта Document:
myDocument.SaveAs2 («C:Документ2.docx») |
Замените «C:Документ2.docx» на путь к нужному каталогу с именем файла, под которым вы хотите сохранить новый документ.
Сохранение изменений в открытом документа
Сохраняйте изменения в существующем документе с помощью метода Document.Save или параметра SaveChanges метода Document.Close:
‘Сохранение изменений документа myDocument.Save ‘Сохранение изменений документа ‘при закрытии myDocument.Close ‘по умолчанию True myDocument.Close True myDocument.Close wdSaveChanges ‘Закрытие документа без ‘сохранения изменений myDocument.Close False myDocument.Close wdDoNotSaveChanges |
Закрытие любого сохраненного документа
Метод Document.Close закрывает документ, но не приложение. Если работа с приложением закончена, оно закрывается с помощью метода Application.Quit.
Краткое описание
Макрос на основе шаблонов в формате Word и по заданному списку значений в Excel формирует необходимое количество вордовских документов. Количество формируемых файлов неограниченно и зависит только от числа указанных вами параметров в Excel.
Подробное описание
Если по роду деятельности часто приходится формировать какие-либо документы в Word по шаблону (приказы, распоряжения, договора, соглашения, счета и др), то вам может пригодится макрос для автоматизации создания вордовских документов на основе исходных данных в файле Excel.
Макрос удобно и быстро создает необходимые документы, исходя из указанных шаблонов и настроенных параметров.
— Шаблоны задаются в формате Word. Количество одновременно используемых шаблонов неограниченно.
— Настройки (параметры) для подстановки в шаблоны хранятся в файле эксель. Может быть задано неограниченное количество параметров.
Из дополнительных возможностей макроса:
— В настройках листа с данными достаточно указать название шаблона и именно данный шаблон будет применен для формирования документов. Если шаблонов указано несколько, то формирование документов будет происходить по нескольким (указанным) шаблонам.
— В настройках макроса можно указать, по каким строкам формировать документы, а по каким пропускать.
— Для каждого формируемого документа можно указать необходимое имя (название).
— Для более удобной вставки наименований шаблонов в ячейку достаточно два раза кликнуть на соответствующей ячейке в столбце «C» и в открывшейся форме выбрать нужные шаблоны.
В целом, ничего сложного в работе с макросом и шаблонами нет.
Перед запуском макроса обязательно ознакомьтесь с примечаниями в пункте «Важно» на листе «const».
Скачать макрос эксель для создания документов и примеры шаблонов можно по ссылке выше.
Обновление макроса от 09.07.2020
В программу добавлена возможность замены значений в колонтитулах. Колонтитулы учитываются как верхние, так и нижние. При необходимости можете ознакомиться с примерами заполнения шаблонов, которые также присутствуют в архиве.
Ссылка на загрузку архива с программой обновлена. Актуальная версия программы: «CreateWord, v.2.xlsb».
В данном разделе мы рассмотрим трюк, с помощью которого можно автоматически создавать текстовые документы Word на основе данных, хранящихся в таблице Excel. Это бывает необходимо, например, для быстрого формирования текстовых отчетов, в которых должны фигурировать табличные данные. Использование этого приема мы рассмотрим на конкретном примере.
Предположим, что у нас есть следующие данные о продажах по регионам (рис. 3.31).
Внимание!
При изучении данного раздела следует обращать внимание на расположение данных на рабочем листе (то есть на координаты задействованных ячеек).
Для автоматического создания отчетов на основании приведенных данных следует в стандартном модуле редактора VBA написать код, приведенный в листинге 3.85.
Рис. 3.31. Данные о продажах
Листинг 3.85. Создание документов Word на основе таблицы Excel
Sub ReportToWord()
Dim intReportCount As Integer ‘ Количество сообщений
Dim strForWho As String ‘ Получатель сообщения
Dim strSum As String ‘ Сумма за товар
Dim strProduct As String ‘ Название товара
Dim strOutFileName As String ‘ Имя файла для сохранения
сообщения
Dim strMessage As String ‘ Текст дополнительного сообщения
Dim rgData As Range ‘ Обрабатываемые ячейки
Dim objWord As Object
Dim i As Integer
‘ Создание объекта Word
Set objWord = CreateObject(«Word.Application»)
‘ Информация с рабочего листа
Set rgData = Range(«A1»)
strMessage = Range(«E6»)
‘ Просмотр записей на листе Лист1
intReportCount = Application.CountA(Range(«A:A»))
For i = 1 To intReportCount
‘ Динамические сообщения в строке состояния
Application.StatusBar = «Создание сообщения » & i
‘ Назначение данных переменным
strForWho = rgData.Cells(i, 1).Value
strProduct = rgData.Cells(i, 2).Value
strSum = Format(rgData.Cells(i, 3).Value, «#,000»)
‘ Имя файла для сохранения отчета
strOutFileName = ThisWorkbook.path & «» & strForWho &
«.doc»
‘ Передача команд в Word
With objWord
.Documents.Add
With .Selection
‘ Заголовок сообщения
.Font.Size = 14
.Font.Bold = True
.ParagraphFormat.Alignment = 1
.TypeText Text:=»О Т Ч Е Т»
‘ Дата
.TypeParagraph
.TypeParagraph
.Font.Size = 12
.ParagraphFormat.Alignment = 0
.Font.Bold = False
.TypeText Text:=»Дата:» & vbTab & _
Format(Date, «mmmm d, yyyy»)
‘ Получатель сообщения
.TypeParagraph
.TypeText Text:=»Кому: менеджеру » & vbTab &
strForWho
‘ Отправитель
.TypeParagraph
.TypeText Text:=»От:» & vbTab &
Application.UserName
‘ Сообщение
.TypeParagraph
.TypeParagraph
.TypeText strMessage
.TypeParagraph
.TypeParagraph
‘ Название товара
.TypeText Text:=»Продано товара:» & vbTab &
strProduct
.TypeParagraph
‘ Сумма за товар
.TypeText Text:=»На сумму:» & vbTab & _
Format(strSum, «$#,##0»)
End With
‘ Сохранение документа
.ActiveDocument.SaveAs FileName:=strOutFileName
End With
Next i
‘ Удаление объекта Word
objWord.Quit
Set objWord = Nothing
‘ Обновление строки состояния
Application.StatusBar = False
‘ Вывод на экран информационного сообщения
MsgBox intReportCount & » заметки создано и сохранено в папке » _
& ThisWorkbook.path
End Sub
В результате написания кода в окне выбора макросов станет доступным макрос ReportToWord. После его запуска начнется формирование отчетов (информация о состоянии процесса будет отображаться в строке состояния). По окончании процесса на экране отобразится окно с сообщением о том, что документы сформированы и помещены в ту папку, в которой хранится текущая рабочая книга. В рассматриваемом примере будут созданы три документа с именами Магазин 1.doc, Магазин 2.doc и Магазин 3.doc. Содержимое документа Магазин 1. doc показано на рис. 3.32 (другие документы выглядят аналогичным образом).
В рассматриваемом примере Lesha – это имя пользователя, который создал документ. Очевидно, что в результате внесения соответствующих изменений в код макроса форму создаваемого отчета можно корректировать по своему усмотрению.
Рис. 3.32. Документ Word, созданный на основе данных таблицы Excel
bizard, сначала делайте код в программе Word.
Когда ставите точку, то появляются члены, которые есть у объекта. Если среди членов нет нужного, значит у объекта нет этого члена. Есть случаи, что не все члены появляются после того, как поставишь точку, но такое редко бывает.
TypeParagraph — является членом объекта Selection. Если вы перейдёте в программу Word, октроете программу VBA, введёте ActiveDocument и поставите точку, то во всплывающей подсказке не будет TypeParagraph. Это означает, что у объекта ActiveDocument нет члена TypeParagraph (могут быть исключения — член не появляется, но есть, но это бывает редко).
Здесь:
Visual Basic | ||
|
вы используете ActiveDocument, а должны использовать oDocument, т.к. вся работа у вас из Excel в программе Word ведётся через две переменные: oWord и oDocument. Других слов ваш код не понимает, в т.ч. не понимает слова ActiveDocument.
khmelae Пользователь Сообщений: 6 |
#1 13.01.2017 03:02:19 Здравствуйте! Есть макрос Excel который создает документ Word по шаблону. Необходимо внести изменения в код макроса таким образом чтобы: Пример прилагаю. Заранее спасибо за помощь:)
Прикрепленные файлы
|
||
khmelae Пользователь Сообщений: 6 |
#2 15.01.2017 02:58:16 Доброго всем времени суток! Но возникли две новые трудности: 2) Как сохранить файл в формате PDF а не DOC Заранее спасибо за помощь:)
Прикрепленные файлы
Изменено: khmelae — 15.01.2017 02:59:58 |
||
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#3 15.01.2017 10:55:22
записать в Word сохранение файла в PDF. Будет готовый код.
достаточно его просто не закрывать, я думаю. В этой строке: Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||
khmelae Пользователь Сообщений: 6 |
The_Prist
спасибо за Ваш ответ. К сожалению просто удаление «WD.Close False: » не помогает сохраненные файлы не открываются автоматически. я уже попробовал разные варианты C сохранением в PDF тоже не выходит, по Вашему совету сделал запись макроса «сохранение файла DOC в PDF». Попытался по подобию сделать, но ничего не получилось(((
|
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#5 16.01.2017 10:42:38
Они вообще у Вас создаются? Если каждый файл не закрывать — то он останется открытым, что приведет ровно к тому же эффекту, что закрыть-открыть. Поэтому приведенное мной решение работать должно без проблем, если только у Вас не возникает где-то раньше ошибка кода. Приведите код полностью как Вы там чего изменили. Строка сохранения в PDF у Вас не рабочая — ознакомьтесь со статьей: Как из Excel обратиться к другому приложению Потому что нет у Excel понятия, что такое wdExportFormat. И то ли у Вас опечатка, то ли там знака равно после двоеточия не хватает. Выглядеть в итоге должно как-то так:
только Filename должно так же отдельно формироваться для PDF, чтобы формат был именно .pdf, а не .doc. Т.е. надо создать доп.переменную, такую же как Filename и назначать ей значение. После строки:
записать еще одну:
и для сохранения в PDF использовать её:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||||||
RAN Пользователь Сообщений: 7091 |
#6 16.01.2017 11:00:51
Он открывается, только в скрытом режиме.
|
||||
khmelae Пользователь Сообщений: 6 |
#7 17.01.2017 00:21:46 Добрый вечер! The_Prist .
Изменено: khmelae — 17.01.2017 00:25:51 |
||
khmelae Пользователь Сообщений: 6 |
#8 17.01.2017 01:26:42
Да создаются, я прикрепил вложение можете проверить. По вопросу автоматического открытия / не закрытия сохраненного документа пока решения не нашел The_Prist . Ваш вариант с удалением из кода «WD.Close False:» кажется логичным и правильным, но почему то не работает.
RAN я не совсем понимаю куда можно применить данный метод «WA.Visible = True «
Прикрепленные файлы
Изменено: khmelae — 17.01.2017 01:35:39 |
||||||
Logistic Пользователь Сообщений: 741 |
khmelae
, а что нужно изменить в коде ,что бы можно было формировать один договор ,выделили в таблице ячейку «Прізвище» Дзюба и получили договор по конкретной Фамилии. |
The_Prist Пользователь Сообщений: 14182 Профессиональная разработка приложений для MS Office |
#10 17.01.2017 10:32:17
открываются. И даже по коду видно, что открываются, заполняются и далее СОХРАНЯЮТСЯ КАК. А это значит, что они остаются открытыми. Об этом же говорит строка WD.Close, т.к. если бы они не были открыты — зачем их закрывать?
сразу после строки:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы… |
||||||
khmelae Пользователь Сообщений: 6 |
#11 18.01.2017 00:40:11 Ооо то что надо спасибо The_Prist , теперь я понял как применить идею RAN , ему тоже спасибо за помощь. И так позволю себе подвести промежуточные итоги по улучшению данного макроса. Пример подкрепляю к данному сообщению, код макроса с различными вариантами его работы выкладываю ниже.
Logistic я к сожалению не так хорошо разбираюсь в написании макросов чтобы, так просто и легко написать Вам изменение для формирования договора по выделенной ячейки, могу сказать одно что это точно можно реализовать, т.к. я видел похожие решения на др. форумах, но как реализовать конкретно для этого макроса я не подскажу. Попробуйте обратится к Богу Excel The_Prist
Logistic задачи без внесения изменений в данный макрос. Как вариант можно использовать формулу ВПР и дополнительный столбец с отметкой какую строку нужно сформировать как договор, это если надо сформировать только один договор из списка (пример во вложении). Если же Вам необходимо сформировать несколько договоров то можно использовать ВПР + массив. Если не разберетесь пишите
Прикрепленные файлы
Изменено: khmelae — 18.01.2017 00:43:20 |
||||
msdmo Пользователь Сообщений: 4 |
Доброго времени суток. Прикрепленные файлы
|
msdmo Пользователь Сообщений: 4 |
#13 19.05.2017 16:17:45 Сделал.
Ещё ошибки возникают, если объединённая ячейка попадается (( |
||
Цель процесса автоматического создания документов
Автоматическое создание документа — базовая единица оптимизации ресурсных затрат Вашей организации. Деятельность любой компании неразрывно связана с документооборотом, будь то управление персоналом — кадровая служба (заявления на отпуск, увольнение, больничный), бухгалтерия, либо же просто формирование определенного пакета документов по той или иной активности компании. Зачастую, сам процесс подготовки документов сводится к монотонным действиям по расстановке конкретных значений по заранее отведенным позициям в шаблоне. Слабыми сторонами данного подхода являются: низкая скорость подготовки документации и высокая степень возникновения ошибки ввиду человеческого фактора. При росте объема документации вероятность ошибки только возрастает, например, Вам нужно подготовить доп соглашения для всего штата сотрудников. Основные задачи программы автоматического создания документов Word на основе шаблонов — свести к минимуму вероятность возникновения ошибок ввода, значительно увеличить скорости самого процесса. Все действия сводятся к выбору записи или записей данных о сотруднике/клиенте/заказе/поставщике из исходной таблицы и указанию шаблона подготавливаемого документа.
Ссылки для скачивания:
— Скачать макрос автоматического создания документов Word по шаблону (архив 208КБ)
Как начать работу с автоматическим формированием документов Word:
1. Разархивируйте скачанный архив с файлом с помощью программы 7zip или WinRar.
2. При появлении сообщения о доверенном источнике: закройте программу, кликните правой кнопкой мыши на файле — «Свойства», далее установите галочку напротив «Разблокировать».
3. Если в Вашем Excel запуск макросов по умолчанию отключен, в данном окне необходимо нажать «Включить содержимое».
4. Для полноценной работы с файлом необходимо нажать «Разрешить редактирование» при появлении данного сообщения.
Автоматическое создание документа — этап 1. Настройка программы
Все действия по настройке макроса и сам процесс построения документов происходят на листе «Настройки», который условно можно разделить на две области: таблица исходных данных и панель кнопочного управления.
Таблица исходных данных состоит из строки меток (условных обозначений каждого столбца) — строка №3, заголовка с названиями столбцов — строка №4 и построчных записей — начиная с 5й строки. Количество колонок, их названия и условные обозначения можно свободно редактировать, соблюдая простые правила:
- Если Вы добавляете новую колонку, у нее должно быть название и условное обозначение.
- Для склонения ФИО сотрудника в Родительный или Дательный падежи используйте встроенные функции =RODP() и =DATP() соответственно.
- Не допускайте наличия пустых колонок (без названий и обозначений) между колонками данных.
- Не удаляйте колонку «ФИО сотрудника», т.к. она является ключевой для работы программы. Вы можете ее переименовать — заказчик, ответственный, клиент, менеджер и т.д. на свое усмотрение. Она используется в процессе сохранения итогового word документа, как часть имени, например: Иванов А.В. Заявление на отпуск, Петров В.К. Накладная на отгрузку.
Также Вы можете разбивать записи таблицы (строки) на группы. Например Вы хотите завести сотрудников по отделам или заказчиков по направлениям деятельности, или городам расположения и т.д..
Панель кнопочного управления автоматизированного создания документов состоит из следующих элементов интерфейса:
- Добавить запись — вставляет новую строку в заранее выбранную вами ячейку. Также можно добавлять записи вручную с помощью стандартной вставки строки excel;
- Добавить группу — вставляет новую серую строку группы в заранее выбранную вами ячейку;
- Удалить элемент — удаляет любую выбранную строку таблицы данных;
- Очистить таблицу — полностью стирает данные из таблицы. Можно использовать для очистки листа от тестовых данных;
- Создать документ — выбор шаблона word для построения документа. Перед этим в таблицы должны быть выбраны записи данных, по которым необходимо произвести построение.
Перед запуском процедуры автоматизированного создания документов убедитесь, что указаны верные пути к word шаблонам и папке сохранения результатов построения!
Автоматическое создание документа — этап 2. Шаблоны Word
Процесс подготовки word шаблонов для автоматического построения документов включает в себя рад несложных действий. Создайте общую папку для всех шаблонов, в ней создайте папки категорий, чтобы разделить шаблоны по областям применения (названия категорий укажите на свое усмотрение). В каждой подпапке определенной категории расположите непосредственно документы word с расставленными метками. Метки расположены в 3й строке таблицы над каждый ее столбцом. Поставьте метки в те места шаблона, в которые вы хотите прокачать данные из определенного столбца. Например, там где должно быть фио сотрудника укажите [fio].
Порядок действий запуска автоматического создания документов
Когда таблица данных заполнена, а метки в шаблонах расставлены по своим местам пора приступать к самой интересной части — автоматизированному формированию документов word.
В первую очередь, выделите строку или диапазон данных таблицы, по которым хотите сформировать документы:
Шаг номер два — нажмите кнопку «Создать документ». Перед Вами появится диалоговое окно, в котором нужно выбрать подпапку — категорию документа и один, либо несколько шаблонов построения. Далее кликните по кнопке «Сформировать документы».
Мои поздравления! Документы успешно сформированы и лежат по указанному Вами пути для сохранения!
Заказать разработку программ или доработку любого проекта
Благодарю Вас за прочтение данной статьи. Надеюсь, что материал подан понятно и я смог ответить на большую часть Ваших вопросов по поводу автоматизации создания документов. Но, как говорится, лучше один раз попробовать, чем сто раз прочитать. Скачивайте программу по ссылке вверху или внизу статьи, в архиве также идет набор тестовых данных, которые содержат как шаблоны, так и заполненную таблицу самого макроса. Просто разархивируйте файлы в любое доступное место и начинайте работу.
Всегда рад ответить на Ваши вопросы, готов подготовить оптимальные решения обработки данных для Вашего бизнеса, автоматизировать рутинные процессы, связаться со мной можно через WatsApp 89507094770, сайт excellab.ru или написать на почту: goryaninov@bk.ru, профиль вк:
Ссылки для скачивания:
— Скачать макрос автоматического создания документов Word по шаблону (архив 208КБ)
Здесь можно ознакомиться с другими программами автоматизации, которые представлены на моем сайте:
— Дневной табель учета рабочего времени в excel
— Почасовой табель учета рабочего времени в excel
— Табель учета рабочего времени в днях по форме Т-13
— Табель расчет и планирование вахты
— Табель учета рабочего времени с учетом ночных смен
— Платежный календарь в excel