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

Таблица 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 доступна для бесплатного скачивания.

 

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

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

 

Вложения:

Комментарии

Настройки просмотра комментариев

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

А каким образов предварительно выделить в документе место для вставки рисунка?.
Вставитьзакладку это понятно Вставка>закладка>имя закладки>окей.

За параметр параметр Range я дочитался в справке, перебрал варианты написания, не получается, выдает ошибку.

WD.InlineShapes.AddPicture Filename:=Filepng, LinkToFile:=False, SaveWithDocument:=True, Range:=2, Left:=100, Top:=100, Width:=50, Height:=50
WD.InlineShapes.AddPicture Filename:=Filepng, LinkToFile:=False, SaveWithDocument:=True, Range:=Top

И еще вопрос: в данном случае пользоваться справкой VBa WORD или Exel?

У метода InlineShapes.AddPicture есть ещё 4-й параметр Range, который позволяет указать, куда именно вставлять картинку

 

параметр Range - тип Variant

 

The location where the picture will be placed in the text. If the range isn't collapsed, the picture replaces the range; otherwise, the picture is inserted. If this argument is omitted, the picture is placed automatically.

Поскольку этот параметр у вас опущен, Word выбирает место для рисунка автоматически.

 

PS: Проще будет воспользоваться объектом Selection, предварительно выделив в документе место для вставки рисунка:

Selection.InlineShapes.AddPicture Filepng, False, True

PPS: Чтобы проще было выделить нужное место в документе, можете добавить в шаблон документа Word закладку (bookmark)

Очень помог ваш макрос, огромное спасибо.
Единственно одна проблемка.
В моей табличке в одной колонке есть имена рисунков которые необходимо вставить
я делаю это с помощью следующего кода
WD.InlineShapes.AddPicture Filename:=Filepng, LinkToFile:=False, SaveWithDocument:=True
Рисунок вставляется отлично, но всегда вначале документа.
Документ имеет всегда 26 строк, мне допустим необходимо вставить ее после 24 строки, или в крайнем случае в конце документа.
Никак не пойму как указать в каком месте вставлять картинку, помогите пожалуйста!

В статье же ясно написано:

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

Const КоличествоОбрабатываемыхСтолбцов = 8 

Измените цифру 8 на другое число - и тогда дополнительные столбцы будут обрабатываться

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

спасибо

Я внес изменения
'Const РасширениеСоздаваемыхФайлов = ".doc"
Filename = НоваяПапка & ФИО '& РасширениеСоздаваемыхФайлов
WD.SaveAs Filename, FileFormat:=0: WD.Close False: DoEvents
C Вордом сталкиваюсь впервые, но в Экселе та же проблема.

При попытке открыть вновь сформированный документ Word (XP, Ofis 2007) начинает сильно ругаться и требовать конвертер mswrd632.wpc

Проблема в строке кода

WD.SaveAs Filename: WD.Close False: DoEvents

Дело в том, что при использовании Word 2007 макрос сохраняет документ в формате docx или подобном (формат "по-умолчанию" для сохранения в Word 2007), а созданный файл получает расширение .doc

При попытке открытия такого файла Word не всегда понимает формат файла (формат отличается от расширения) - из-за того и ошибка.

Попробуйте заменить эту строку на такой вариант:

WD.SaveAs Filename, 0: WD.Close False: DoEvents

(здесь 0 указывает формат файла при сохранении - wdFormatDocument)

К сожалению, пока не имею возможности проверить работу кода - поскольку использую только Word 2003

Для себя проблему решил.

Добрый день!
При попытке открыть вновь сформированный документ Word (XP, Ofis 2007) начинает сильно ругаться и требовать конвертер mswrd632.wpc?
При этом из существующей в архиве папки "Договоры, сформированные 06-06-2011 в 12-26-44", документы открываются без вопросов.

Да, сейчас все работает. Супер!
Большое спасибо за ваши макросы.

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

В макросе была допущена ошибка - потому замена и не выполнялась (во всех версиях Office).

Изначально я тестировал код при подключенной библиотеке Word, и поэтому Excel знал значения констант wdFindContinue и wdReplaceAll.
Перед публикацией примера на сайте я отключил библиотеку Word в Tools-References, но забыл заменить константы Word числовыми значениями.

Правильно будет так (названия констант Word заменены значениями):

With WD.Range.Find
    .Text = FindText
    .Replacement.Text = ReplaceText
    .Forward = True
    .Wrap = 1
    .Format = False: .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    .Execute Replace:=2
End With

Заменил вложение к статье на исправленный вариант.

Здравствуйте, подскажите, пож-та, почему данные в вордовских документах могут не заполняться?

Система WinXP, Office 2007.

Расширения файлов не менял. Использовал ваши файлы как есть (в т.ч. ваш пример).
При запуске макроса, папка создается, доковские документы в ней появляются, но подстановки данных ("слияния") не происходит.

Буду признателен за ответ!

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

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