Макрос предназначен для программного создания документов 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, который позволяет указать, куда именно вставлять картинку
Поскольку этот параметр у вас опущен, Word выбирает место для рисунка автоматически.
PS: Проще будет воспользоваться объектом Selection, предварительно выделив в документе место для вставки рисунка:
PPS: Чтобы проще было выделить нужное место в документе, можете добавить в шаблон документа Word закладку (bookmark)
Очень помог ваш макрос, огромное спасибо.
Единственно одна проблемка.
В моей табличке в одной колонке есть имена рисунков которые необходимо вставить
я делаю это с помощью следующего кода
WD.InlineShapes.AddPicture Filename:=Filepng, LinkToFile:=False, SaveWithDocument:=True
Рисунок вставляется отлично, но всегда вначале документа.
Документ имеет всегда 26 строк, мне допустим необходимо вставить ее после 24 строки, или в крайнем случае в конце документа.
Никак не пойму как указать в каком месте вставлять картинку, помогите пожалуйста!
В статье же ясно написано:
Измените цифру 8 на другое число - и тогда дополнительные столбцы будут обрабатываться
Подскажите, пожалуйста, как расширить таблицу в excel для указания дополнительных переменных? Если просто дописывать, то ничего не происходит
спасибо
Я внес изменения
'Const РасширениеСоздаваемыхФайлов = ".doc"
Filename = НоваяПапка & ФИО '& РасширениеСоздаваемыхФайлов
WD.SaveAs Filename, FileFormat:=0: WD.Close False: DoEvents
C Вордом сталкиваюсь впервые, но в Экселе та же проблема.
Проблема в строке кода
Дело в том, что при использовании Word 2007 макрос сохраняет документ в формате docx или подобном (формат "по-умолчанию" для сохранения в Word 2007), а созданный файл получает расширение .doc
При попытке открытия такого файла Word не всегда понимает формат файла (формат отличается от расширения) - из-за того и ошибка.
Попробуйте заменить эту строку на такой вариант:
(здесь 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 заменены значениями):
Заменил вложение к статье на исправленный вариант.
Здравствуйте, подскажите, пож-та, почему данные в вордовских документах могут не заполняться?
Система WinXP, Office 2007.
Расширения файлов не менял. Использовал ваши файлы как есть (в т.ч. ваш пример).
При запуске макроса, папка создается, доковские документы в ней появляются, но подстановки данных ("слияния") не происходит.
Буду признателен за ответ!