Макрос предназначен для программного создания документов Word на основе шаблона(без использования функции слияния в Word) В прикреплённом к статье архиве находятся 2 файла:
Настройки макроса задаются в коде:Const ИмяФайлаШаблона = "шаблон.dot" Const КоличествоОбрабатываемыхСтолбцов = 8 Const РасширениеСоздаваемыхФайлов = ".doc" При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста ("кода поля") из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel) Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время (например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24) Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc
PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, - так что код недостаточно универсален. Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))
Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
|
| Вложение | Размер |
|---|---|
| CreateWordDocuments2.zip | 139.71 КБ |
- 12248 просмотров

Комментарии
А как реализовать те же возможности, только используя функцию слияния в 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 файл для отправки в банк в дос кодировки
Чтобы макрос только распечатывал документы, не сохраняя их,
замените код сохранения файла
на код распечатки:
PS: работу кода с изменениями не проверял.
Что это за загадочная 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.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.
Такчто спасибо Вам и интернету!
плохо вы справку читали...
Что это такое?
В справке написано, что у функции всего 4 параметра.
Вы же изобрели ещё три...
Фантазия - это, конечно, хорошо, но с программированием она не всегда совместима...
А тут вы что имели ввиду? У вас определена переменная Top типа Range? Сомневаюсь...
Посмотрите в интернете примеры использования этой функции, или задайте вопрос на форуме по Word.
А каким образов предварительно выделить в документе место для вставки рисунка?.
Вставитьзакладку это понятно Вставка>закладка>имя закладки>окей.
За параметр параметр 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 заменены значениями):
.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.
Расширения файлов не менял. Использовал ваши файлы как есть (в т.ч. ваш пример).
При запуске макроса, папка создается, доковские документы в ней появляются, но подстановки данных ("слияния") не происходит.
Буду признателен за ответ!
Отправить комментарий