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

 

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

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

 

Вложения:

Комментарии

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

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

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

Спасибо за макрос. Очень помог в работе!!!

Этот макрос уже не поддерживается.
Используйте новую (расширенную) версию программы, - там все работает без ошибок.

Макрос выдает ошибку (Type mismatch (Error 13)) при обработке ячейки с формулой, подскажите пожалуйста как решить эту проблему?

В универсальной программе заполнения документов есть такая возможность (режим MultiRow)

Здравствуйте. Спасибо вам за этот макрос, который помог мне в работе.
Не могли бы вы еще подсказать как сделать чтоб в шаблон Word прописывались данные из нескольких (разных) строк Excel?
Заранее спасибо.

Подскажите... а можно сделать чтобы макрос обрабатывал только те строки в которых стоит номер договора, а если пусто пропускал?

Ознакомился с программой. Серьезный труд. Снимаю шляпу. Но мне понравился именно этот макрос. С колонтитулами я разобрался - оказалось ничего сложного, да и сам макрос оброс уже кучей доработок. Затянуло, знаете ли ))

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

Добрый день! Макрос очень помог в работе. Доделал его немного под свои нужды: вывод в разные шаблоны документов word при разных значениях в excel. Остался один вопрос - в сам документ word текст вставляется отлично, а вот в колнтитулы - нет :( Подскажите, пожалуйста, как это исправить?

Вова, если нет денег на заказ, есть только 2 варианта:
1) разобраться в этих макросах, и сделать самому (благо, примеров подобных макросов в интернете предостаточно)
2) обратиться за помощью на любой из форумов по Excel (но, опять же, если с вашей стороны никаких наработок нет, вряд ли кто сделает всю работу за вас)

А если в етом макросе сделать так чтоби он заменял дание сначла с строки активной ячейки а потом если одна из ячеек следующей строки = ячейке из предедущей строкии снова вставлял в ворд документ заменяемие поля и снова делел замену, и так до момента когда одна из ячеек не будеть раван ячеике из следуищей, строки тогад макрос по ектому условию не вставляет заменяемие поля а просто сохраняет ворд документ. То есь допустим мне нужно создать документ ворд по одному из людей дание по которому есть в нескольких строках. Пожалста помогите очень нужно, просто нет денег на заказ...

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

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

А как реализовать те же возможности, только используя функцию слияния в Word. Чтобы каждый новый раз не формировался новый документ а запись делалась на новой странице?

Теперь доступна новая версия универсальной программы формирования документов по шаблонам.

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

Количество файлов-шаблонов (Word, Excel, TXT) неограничено.

Бесплатно скачать и протестировать программу можно по этой ссылке:
http://excelvba.ru/programmes/FillDocuments

Замечательно!!! Я, долгое время искал нечто подобное. Но к счасливой случайности вышел на Ваш сайт. Установил панели для VBA. И ещё коу-что. Практически разобрался в работе данного макроса. В VBA я, недавно. Но поставил перед собой задачу изучить его. Для этого я, решил составить программу для заполнения бланков аттестатов о среднем образовании и бланков дипломов об окончании ПТУ. До этого они заполнялись вручную. Задачу в Excel, я, программно решил, не безВашего в ней участия, некоторые фрагменты кода. У меня база заполняется посредством форм в виде развёрнутого аттестата. А, вот транспортировка данных в Word с листов - разворот и последняя страница. Как-то чуть-чуть не вяжется с общим видом программы. Нельзя-ли макрос транспортировки "засунуть" под форму? Если можно, то не смогли бы Вы посоветовать мне как это сделать. Делаю эту программу потому, что на Украине все мучаются с авторизованым заполнением бланков об окончании учебных заведений. А, так я бы мог бесплатно, это моё безусловное кредо, предоставить программу желающим. Заранее Вам благодарен. Помогая мне Вы помогаете и до того замордованым классным руководителям школ Украины!!!!!!

можно ли по каждой записи сформировать 2 документа word?

Подскажите как все же используя макрос сохранять данные не в word а в pdf формате. Office 2007

Mike, попробуйте перезагрузить компьютер,
и потом, не открывая никаких файлов WORD, просто запустить файл Excel, и нажать кнопку.

Еще раз обращаю ваше внимание - программа WORD не должна быть открыта в момент работы макроса.
(т.е., конечно, открытый Word сам по себе не мешает, - но в вашем случае, похоже, в Word открыт один из файлов-шаблонов, требующихся макросу)

Добрый день! Спасибо за макрос. У меня никак не получается создать из excel документ ворд. При запуске макроса выскакивает сообщение "Приложению word не удалось сохранить файл, т.к. он используется другим процессом..." Помогите, пожалуйста

ну в таблице у меня 1500 строк
именно поэтмоу я ищу решения автоматизации
и мне можно всю строку скопировать прям с таблицей

Да, есть такое дело, - данный макрос позволяет подставить в документ Word значения, не превышающие по длине 255 символов.

Это не баг макроса - это встроенное ограничение от Microsoft.
В макросе это не было предусмотрено (я не знал про это ограничение, когда писал макрос), - поэтому и вылетает сообщение об ошибке.

Вариантов решения здесь несколько, например:
- разбить столбец с длинным текстом на 2 или более столбцов, а в шаблоне Word предусмотреть 2 или более полей для вставки
- предварительно, при помощи формулы, в доп.столбце подрезать текст до нужной длины

ошибка 9105
длина строки превышает 255 символов

Добрый день
Как сохранить в pdf используя ваш макрос - что бы файлы сохранялись в pdf а не word
2007 office

А вы пробовали поискать ответ на свой вопрос в Яндексе или Гугле?
Достаточно в поисковой строке набрать «Excel VBA сохранить в PDF», и по первым же ссылкам легко найти строку с необходимым кодом.

В Excel 2007 доступен метод ExportAsFixedFormat, используя который, вы можете сохранить файл в формате ПДФ.

Так как сохранить в pdf. Установлен 2007 office

пытаюсь все распечатать без сохранения сейчас у меня это выглядит уже вот так. все равно спрашивает про сохранение ворд 2010
WD.PrintOut Copies:=num, Collate:=1
Application.Wait Now() + TimeValue("00:00:2")
Application.DisplayAlerts = False
WD.Close False: DoEvents
как победить то. (спасибо.

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

как его заставить закрыть файл без сохранения. т.е. только что бы распечатал и все

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

WD.SaveAs Filename: WD.Close False: DoEvents

на код распечатки:

WD.PrintOut : WD.Close False: DoEvents

 

PS: работу кода с изменениями не проверял.

 

Как можно данные таблицы Excel сохранить в Dbf формате в doc кодировке

Что это за загадочная DOC-кодировка?
Какое отношение ваш вопрос имеет к теме этой статьи?

Как можно данные таблицы Excel сохранить в Dbf формате в doc кодиковке

!! а как его заставить закрыть файл без сохранения. т.е. только что бы распечатал и все.

Огромное СПАСИБО автору!

Добрый день Установлен 2007 что надо дописать

Возможно и в ПДФ сохранять, если у вас установлен Word 2007 или новее.
При желании можно сделать сохранение в PDF и из Office 2003, но придётся устанавливать в системе виртуальный PDF-принтер, и выводить созданные документы на печать на этот принтер

Возможно ли вместо сохранения в формате word сохранять в формате pdf

Для создания книг Excel нужен совсем другой макрос
(проще написать новый, чем переделывать этот)

Пока подобных заказов не было - так что предложить готовое решение не могу.

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


Чтобы документы Word формировались только для выделенных строк - надо усложнять макрос.

Пример такой программы есть у меня на сайте


В планах у меня было сделать универсальный макрос для создания документов (заполнения) документов Word и Excel по шаблонам,
но пока нет на это времени.

Как сделать тоже самое, только чтоб документ excel формировал. Перепробовал варианты, не работает.

Как сделать так чтобы формировались документы не по всем строчкам а только по нужным с помощью макроса непример если в сталбце А стоит буква а

Ставил после SaveAs и до Close. Потом поставил и до SaveAs
WD.PrintOut Copies:=1, Collate:=1
WD.SaveAs Filename
WD.Close False
DoEvents

Как выяснилось - он не успевал отправить на печать и закрывал. Сделал паузу в 5 секунд. Стал печатать нормально:
WD.PrintOut Copies:=1, Collate:=1
WD.SaveAs Filename
Application.Wait Now() + TimeValue("00:00:5")
WD.Close False
DoEvents

За макрос большое спасибо. Очень помогло. Сделал, что требовалось, хотя в VBA ни в зуб ногой.

А где именно в коде вы добавили команду печати?
Надо добавлять её СРАЗУ ПОСЛЕ команды сохранения:

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

а не так:

WD.SaveAs Filename, 0: WD.Close False: DoEvents
WD.PrintOut ' документ уже закрыт - печатать нечего

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

После сохранения добавляю
WD.PrintOut
Но печатать не хочет. Можете подсказать в чем может быть проблема?
Задача: распечатать все эти созданные в цикле вордовские документы.

Можно. Специально для таких целей делал подобную программу.
Только в качестве шаблона - лист надстройки.
Скопируйте всё из XLT в надстройку, добавьте несколько чисел в шаблон, - и всё, осталось нажать кнопку. (правда, результат окажется на одном листе Excel)

Если надо именно создавать файлы Excel, и именно из XLT, - у меня на сайте много наработок, осталось только собрать их воедино.

Или заказывайте разработку программы под ваши нужды.

Здравствуйте, а можно тоже самое, только чтобы создавал не word документ а excel, ну и соответственно по шаблону *.xlt? оочень надо..Заранее спасибо.

1) Заменил строку WD.SaveAs Filename, 0: WD.Close False: DoEvents на рекомендованный вариант WD.SaveAs Filename, 0: WD.Close False: DoEvents
2) В настройках Word 2007 (Параметры Word->Сохранение) установил, чтобы новые файлы по умолчанию сохранялись в формате *.doc
Результат: Ошибка с mswrd632.wpc при открытии вновь сформированного файла исчезла.

Для меня оказался очень полезным макросом, спасибо!
А можно сделать так, что бы можно было выборочно обрабатывать персонал? Т.е нужен скажем только последний из всего списка, на него только и делаем отчет.
Спасибо за ответ.

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

Огромное Вам спасибо! Очень помогли!!!

Порырлся, поискал и вот что получилось

WD.InlineShapes.AddPicture Filename:=Filepng, LinkToFile:=False, SaveWithDocument:=True, Range:=WD.Paragraphs(62).Range

В справке описания четырех параметров я так и не нашел.
Там написано следующее:

Range Optional 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.

Такчто спасибо Вам и интернету!

За параметр параметр Range я дочитался в справке

плохо вы справку читали...

Что это такое?

Left:=100, Top:=100, Width:=50, Height:=50

В справке написано, что у функции всего 4 параметра.
Вы же изобрели ещё три...
Фантазия - это, конечно, хорошо, но с программированием она не всегда совместима...

Range:=Top

А тут вы что имели ввиду? У вас определена переменная Top типа Range? Сомневаюсь...

Посмотрите в интернете примеры использования этой функции, или задайте вопрос на форуме по Word.

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

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