Макрос переноса данных из word в word
Вечер добрый.
Столкнулся с задачей, что нужно переносить готовые сводные таблицы (которые создаются макросом) в файл Word, да и еще с готовым и динамичным оформлением.
Как связать VBA Word и Excel не знаю, таблиц много и задача ежедневная.
Будьте добры, расскажите как автоматизировать такую задачу.
Подготовил маленький пример, дабы было понятно о чем речь
В Excel что было и в Word что должно стать, таблицы более массивные, но это для примера.
Вечер добрый.
Столкнулся с задачей, что нужно переносить готовые сводные таблицы (которые создаются макросом) в файл Word, да и еще с готовым и динамичным оформлением.
Как связать VBA Word и Excel не знаю, таблиц много и задача ежедневная.
Будьте добры, расскажите как автоматизировать такую задачу.
Подготовил маленький пример, дабы было понятно о чем речь
В Excel что было и в Word что должно стать, таблицы более массивные, но это для примера. Govard88
Подготовил маленький пример, дабы было понятно о чем речь
В Excel что было и в Word что должно стать, таблицы более массивные, но это для примера. Автор - Govard88
Дата добавления - 04.12.2015 в 16:48
Sub d()
Dim appWD As Word.Application
Set appWD = CreateObject("Word.Application")
Range("A1:C7").Copy
appWD.Documents.Add
appWD.ActiveDocument.Range.PasteSpecial , , wdInLine, , wdPasteOLEObject
appWD.Visible = True
End Sub
[/vba]
Если не сработает - подключите библиотеку microsoft.word в vba
если нужна вставка как таблицы - то wdPasteOLEObject
- вставка как картинки wdPasteMetafilePicture
Sub d()
Dim appWD As Word.Application
Set appWD = CreateObject("Word.Application")
Range("A1:C7").Copy
appWD.Documents.Add
appWD.ActiveDocument.Range.PasteSpecial , , wdInLine, , wdPasteOLEObject
appWD.Visible = True
End Sub
[/vba]
Если не сработает - подключите библиотеку microsoft.word в vba
если нужна вставка как таблицы - то wdPasteOLEObject
- вставка как картинки wdPasteMetafilePicture SLAVICK
Иногда все проще чем кажется с первого взгляда.
Sub d()
Dim appWD As Word.Application
Set appWD = CreateObject("Word.Application")
Range("A1:C7").Copy
appWD.Documents.Add
appWD.ActiveDocument.Range.PasteSpecial , , wdInLine, , wdPasteOLEObject
appWD.Visible = True
End Sub
[/vba]
Если не сработает - подключите библиотеку microsoft.word в vba
если нужна вставка как таблицы - то wdPasteOLEObject
- вставка как картинки wdPasteMetafilePicture Автор - SLAVICK
Дата добавления - 04.12.2015 в 18:03
SLAVICK, Спасибо большое, все работает
А библиотеки не было, всегда считал, что VBA в офисе работает без доп.настроек между своими приложениями.
SLAVICK, Спасибо большое, все работает
А библиотеки не было, всегда считал, что VBA в офисе работает без доп.настроек между своими приложениями. Govard88
SLAVICK, буду вам благодарна если подскажите как создать макрос, который переводит данные построчно записи excel в новый созданный файл word. Каждой строке соответствует свой файл. То есть передать данные строки таблицы, а не всей таблицы excel в определенной форме в файле word.
Я пыталась сделать что-то такое на оснвое вашего кода. Сама программирую на с++. Если найдете время, буду очень вам благодарна.
SLAVICK, буду вам благодарна если подскажите как создать макрос, который переводит данные построчно записи excel в новый созданный файл word. Каждой строке соответствует свой файл. То есть передать данные строки таблицы, а не всей таблицы excel в определенной форме в файле word.
Я пыталась сделать что-то такое на оснвое вашего кода. Сама программирую на с++. Если найдете время, буду очень вам благодарна. Dana0856
Я пыталась сделать что-то такое на оснвое вашего кода. Сама программирую на с++. Если найдете время, буду очень вам благодарна. Автор - Dana0856
Дата добавления - 09.07.2019 в 14:57
АВТОМАТИЗАЦИЯ ЗАПОЛНЕНИЯ ДОКУМЕНТОВ, ЧАСТЬ 4: ПЕРЕНОС ДАННЫХ В WORD
В предыдущих статьях цикла "Автоматизация заполнения документов" я рассказал о том, как сформировать пользовательский интерфейс приложения, организовать проверку вводимых данных и получить число прописью без использования кода VBA. В этой, заключительной статье речь пойдет о волшебстве - переносе всех необходимых значений из рабочей книги Excel в документ Word. Давайте я покажу Вам то, что должно получиться в итоге:
Описание механизма
Для начала в общих чертах опишу, каким именно образом будет происходить перенос данных в документ Word. Прежде всего, нам понадобится шаблон документа Word, содержащий всю разметку, таблицы и ту часть текста, которая будет оставаться неизменной. В этом шаблоне необходимо определить места, в которые будут подставлены значения из рабочей книги Excel, - удобнее всего это сделать с помощью закладок. После этого необходимо упорядочить данные Excel таким образом, чтобы обеспечить соответствие шаблону Word, ну и в последнюю очередь - написать саму процедуру переноса на VBA.
Создание шаблона документа Word
Тут все предельно просто - создаем обычный документ, набираем и форматируем текст, в общем, добиваемся того, чтобы получить необходимую форму. В тех местах, куда необходимо будет подставить значения из Excel нужно создать закладки. Это делается следующим образом:
- Для удобства поддержки напечатать в нужном месте название закладки. Я еще и заключил названия в угловые скобки, так что получилось, например, вот так: для закладки, содержащей дату документа.
- Выделить все название закладки (в моем случае вместе с угловыми скобками), перейти на вкладку "Вставка" и нажать кнопку "Закладка":
Таким образом нужно будет создать все закладки, то есть отметить все места, куда будут вставлены данные из Excel. Получившийся файл нужно сохранить как "Шаблон MS Word" с помощью пункта меню "Файл" -> "Сохранить как. ".
Подготовка данных Excel
Я решил для удобства поместить все данные, которые необходимо перенести в документ Word, на отдельном рабочем листе с названием Bookmarks - закладки. На этом листе два столбца: в первом содержатся названия закладок (в точности так, как они названы в документе Word), а во втором - соответствующие значения, подлежащие переносу.
Часть этих значений получена напрямую из листа ввода данных, а часть - из вспомогательных таблиц, расположенных на листе Support . В этой статье я не буду разбирать формулы, рассчитывающие нужные значения, если что-то будет непонятно - задавайте вопросы в комментариях.
На этом этапе важно правильно указать все названия закладок - от этого зависит правильность переноса данных.
Процедура переноса
- Код выполняется в рабочей книге Excel, данные передаются в Word по одному значению за раз и сразу же размещаются в документе.
- Код выполняется в отдельном документе Word, все данные передаются из Excel одним пакетом.
С точки зрения скорости выполнения, особенно при большом количестве закладок, второй вариант выглядит гораздо привлекательнее, однако требует более сложных действий. Именно его я и использовал.
- Создать шаблон документа Word с поддержкой макросов. В этом шаблоне будет содержаться выполняемый код на VBA.
Почему нужно создать именно шаблон? Таким образом можно защитить программный код от неумышленного изменения. Дело в том, что каждый раз при открытии шаблона создается новый файл Word, сохранить который поверх существующего шаблона просто так не получится. Сам шаблон при этом остается неизменным.
Текст процедуры я приводить в статье не буду - его можно легко посмотреть в файле FillDocument.dotm , расположенном в папке Template в архиве с примером.
Как же воспользоваться всем этим для решения именно Вашей задачи?
Понимаю, что на словах это все выглядит очень просто, но что же получается на деле? Я предлагаю Вам просто воспользоваться уже готовым вариантом. Скачайте архив с примером, в рабочей книге Excel нажмите комбинацию клавиш Alt+F11, чтобы открыть редактор Visual Basic и прочитайте все мои комментарии к программе. Для того, чтобы изменить программу под свои нужды Вам понадобится всего лишь изменить значение нескольких констант, они вынесены в самое начало программы. Весь текст программы Вы можете свободно скопировать в свой проект.
Структура архива
Основной файл - рабочая книга Excel с названием "Создание подтверждений". В этой рабочей книге 4 рабочих листа, из которых отображаются только два: "Input" - лист ввода данных и "Database" - архив всех введенных документов.
В папке Templates находятся шаблоны документов Word. Один из них - шаблон, содержащий программу заполнения закладок, а второй - форма для заполнения. Вы можете использовать без изменений шаблон с программой, но форму для заполнения, естественно, придется переделать в соответствии с Вашими нуждами.
Как переработать пример "под себя"?
- Подготовить шаблон документа Word, который необходимо заполнить. Создать в нем все необходимые закладки и сохранить как "шаблон MS Word".
- Скопировать в папку с подготовленным шаблоном файл FillDocument.dotm из архива, приложенного к этой статье. Этот файл отвечает за заполнение закладок шаблона, и в нем ничего менять не нужно.
- Подготовить рабочую книгу Excel для ввода данных. Вам решать, будет ли она обладать каким-либо "продвинутым" пользовательским интерфейсом и осуществлять разные хитрые расчеты. Главное, чтобы в ней содержался рабочий лист с таблицей соответствия имени закладки в шаблоне Word и значения, которое нужно подставить.
- Вставить в подготовленную рабочую книгу код программы на VBA из файла-примера. Заменить все константы в соответствии с Вашим проектом.
- Протестировать правильность работы.
- Активно пользоваться!
Вместо заключения
Статья, если честно, получилась какой-то путаной и, наверное, не очень понятной, поэтому я жду Ваших вопросов по поводу работы кода, формул или механизма в целом в комментариях к ней.
Другие статьи из цикла:
По этой ссылке Вы перейдете на сайт Microsoft SkyDrive, где Вам будет предложено скачать файл Confirm.rar - это и есть архив приложения.
Вопрос от Андрея:
У меня есть вордовский документ в котором в таблице есть текстовые данные (например "Название фирм") Есть второй документ, в который нужно вставить данные из 1 документа, но в определенное места (например такое место как:шапка документа) Места, где есть данные в первом вордовском документе всегда одинаковые, как и места во втором.
Как это можно реализовать с помощью Макроса?
2 Ответ от Akhiles 14.01.2010 15:02:53
Подготовь исходный документ, чтобы в нем была таблица хотя бы с одним столбцом "Название компании". Конечный документ можно в принципе доделать уже в процессе слияния (просто потом много лишнего в записанном макросе поудалять нужно будет), а можно и до процесса, создав шаблон конечного документа и используя вкладу "Рассылки" в MSW2007.
Похожие темы
Макрос переноса данных из одного документа в другой
Среди всех программ офисного пакета Microsoft наиболее часто большинству работающих за компьютером людей приходится пользоваться текстовым редактором Word. На портале о Microsoft Office Word вы узнаете про: как отредактировать текст в word2007 в шаблон методички. Конечно, использовать это мощное приложение просто для набора текста, все равно, что забивать гвозди с помощью микроскопа. На портале о Microsoft Office Word вы узнаете про: office 2003 рецензирование. Редактор обладает множеством встроенных функций для работы с текстами, таблицами, изображениями. Word позволяет значительно сократить количество ручного труда при наборе или редактировании текста, дает простор для фантазии при оформлении. Наш сайт о Microsoft Office Word даст ответ про: при открытие на другом компьютере сбивается форматирование текста.
Познакомиться со всеми тонкостями работы с программой, узнать секреты и хитрости настроек различных функций можно на сайте и форуме Ворд Эксперт, где собрана вся информация, касающаяся работы с приложением. Наш сайт о Microsoft Office Word даст ответ про: как разгруппировать рисунок в ворд 2010.
В подразделе «Часто задаваемые вопросы» вы найдете общую информацию и список литературы по данной теме. На портале о Microsoft Office Word вы узнаете про: как сделать в ворде одну страницу альбомной. Также для удобства читающих там рассмотрены наиболее часто встречающиеся вопросы по работе программы. Наш сайт о Microsoft Office Word даст ответ про: как установить ворд 2007 без ключа. В этом подразделе, к примеру, собрана базовая информация о макросах, освещены вопросы автоматического удаления пробелов и так далее. Наш сайт о Microsoft Office Word даст ответ про: как создать страницу быстрого доступа.
Более же полно и подробно вопросы настройки программы, форматирования и рецензирования текста в разных версиях Ворда освещены в подразделе «Настройки и Форматирование», а тонкостям написания различных макросов и создания шаблонов можно научиться в разделе «Автоматизация». Наш сайт о Microsoft Office Word даст ответ про: как установить шрифты в word 2010.
Также на форуме Ворд Эксперт вы найдете готовые решения различных рабочих проблем или сможете оставить заявку с описанием своего вопроса в соответствующих разделах. Наш сайт о Microsoft Office Word даст ответ про: с pdf в word всю сираницу.
Если ваши коллеги или знакомые пользуются какими-либо макросами, автоматизирующими часто повторяемые действия или решающими специфические задачи в документах Word, то имеет смысл взять на вооружение такой макрос и использовать его на своем компьютере для своих нужд. Но здесь возникает вопрос: как перенести этот макрос в свои документы (шаблоны)?
Первый способ – воспользоваться диалоговым окном Организатор и скопировать модуль с макросами из одного документа (шаблона) в другой документ, который затем будет передан пользователю.
Здесь следует отметить, что автоматически создаваемые макросы в редакторе Word записываются в стандартный модуль NewMacros глобального (общего) шаблона Normal.dot. Этот модуль может содержать большое количество макросов для самых различных манипуляций с текстом.
Чтобы воспользоваться этим способом выполните следующие действия.
Если вы не хотите передавать все макросы, содержащиеся в модуле NewMacros, а только некоторые из них, то имеет смысл создать отдельный модуль и уже в него включить необходимые для передачи макросы.
Чтобы воспользоваться этим способом, сначала следует открыть редактор Word с документом, содержащим ваши макросы, а затем открыть редактор Visual Basic с помощью сочетания клавиш «Alt»+«F11».
В открывшемся окне редактора кода макрокоманд будут отображаться несколько окон: Окно проектов (Project Explorer), Окно свойств (Properties Window) и, если доступно, то и окно кода:
В окне проектов вы можете видеть различные модули, объединенные в группу Modules. Именно в этой группе в шаблоне Normal.dot и создается стандартный модуль NewMacros.
В окне свойств отображаются доступные для редактирования свойства модулей. Выделив в окне проектов нужный модуль и перейдя в окно свойств можно переименовать этот модуль, дважды щелкнув мышью на поле Name.
Чтобы создать новый модуль, в меню Insert выберите команду Module . В группе Modules будет создан новый модуль с типовым названием Module1, и откроется окно кода с мигающим курсором ввода.
Перейдите на окно свойств и дважды щелкните мышью по полю Name. Типовое наименование модуля выделиться и вы можете переименовать модуль.
Чтобы скопировать во вновь созданный модуль нужные макросы, просто скопируйте коды нужных макросов в буфер обмена и вставьте их в ваш модуль.
После этого можно закрыть окно редактора VB и повторить действия по переносу нужного модуля с макросами из одного документа в другой.
И третий способ переноса макросов в другие документы – экспорт и импорт модулей.
Вы можете помочь в развитии сайта, сделав пожертвование:
--> Или помочь сайту популярной криптовалютой:
BTC Адрес: 1Pi3a4c6sJPbfF2sSYR2noy61DMBkncSTQ
ETH Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634
LTC Адрес: LUyT9HtGjtDyLDyEbLJZ8WZWGYUr537qbZ
USDT (ERC-20) Адрес: 0x7d046a6eaa1bd712f7a6937b042e9eee4998f634
Яндекс Деньги: 410013576807538
А тут весь список наших разных крипто адресов, может какой добрый человек пожертвует немного монет или токенов - получит плюсик в карму от нас :) Благо Дарим, за любую помощь! -->
При нажатии кнопки запуска макрос на основе шаблона dot создаёт очередной файл, и в этом документе производит замену текста ("кода поля") из первой строки файла Excel на значение поля (из очередной строки с данными файла Excel)
Папка для сформированных документов создаётся автоматически, и содержит в имени текущую дату и время
(например, созданная папка будет называться Договоры, сформированные 01-05-2011 в 15-03-24)
Имена создаваемых файлов формируются объединением полей фамилия, имя и отчество, с добавлением расширения doc
PS: Макрос был написан достаточно давно, когда я только начинал изучать VBA, - так что код недостаточно универсален.
Но, в качестве примера, пожалуй, подойдёт (если вам нужен более функциональный макрос, воспользуйтесь универсальной надстройкой (см. ниже))
Ознакомьтесь также с универсальной надстройкой формирования документов по шаблонам,
которая может делать всё тоже самое, что и эта программа,
только в качестве шаблонов могут выступать, помимо документов Word, ещё текстовые файлы, и книги Excel.
В надстройке - много возможностей, и полезных дополнений: склонение ФИО в родительный и дательный падежи, автоматический вывод на печать (с заданным количеством копий), размещение созданных файлов в разных папках, создание и рассылка писем со вложениями, и множество других полезных функций.
По вышеприведённой ссылке программа заполнения документов Word из Excel доступна для бесплатного скачивания.
Внимание: просьбы о доработке макроса, описанного в этой статье, не принимаются.
Есть новая (универсальная) версия, - в которой уже есть практически всё, что может понадобиться.
Комментарии
Спасибо, за макрос, не могли бы подсказать что в нем изменить что бы обрабатывалась только та строка в которой выделенная ячейка?
Спасибо за макрос. Очень помог в работе.
Этот макрос уже не поддерживается.
Используйте новую (расширенную) версию программы, - там все работает без ошибок.
Макрос выдает ошибку (Type mismatch (Error 13)) при обработке ячейки с формулой, подскажите пожалуйста как решить эту проблему?
Здравствуйте. Спасибо вам за этот макрос, который помог мне в работе.
Не могли бы вы еще подсказать как сделать чтоб в шаблон Word прописывались данные из нескольких (разных) строк Excel?
Заранее спасибо.
Подскажите. а можно сделать чтобы макрос обрабатывал только те строки в которых стоит номер договора, а если пусто пропускал?
Ознакомился с программой. Серьезный труд. Снимаю шляпу. Но мне понравился именно этот макрос. С колонтитулами я разобрался - оказалось ничего сложного, да и сам макрос оброс уже кучей доработок. Затянуло, знаете ли ))
Евгений, воспользуйтесь универсальной программой для заполнения документов Word - там реализована подстановка значений в колонтитулы
Вова, если нет денег на заказ, есть только 2 варианта:
1) разобраться в этих макросах, и сделать самому (благо, примеров подобных макросов в интернете предостаточно)
2) обратиться за помощью на любой из форумов по Excel (но, опять же, если с вашей стороны никаких наработок нет, вряд ли кто сделает всю работу за вас)
А если в етом макросе сделать так чтоби он заменял дание сначла с строки активной ячейки а потом если одна из ячеек следующей строки = ячейке из предедущей строкии снова вставлял в ворд документ заменяемие поля и снова делел замену, и так до момента когда одна из ячеек не будеть раван ячеике из следуищей, строки тогад макрос по ектому условию не вставляет заменяемие поля а просто сохраняет ворд документ. То есь допустим мне нужно создать документ ворд по одному из людей дание по которому есть в нескольких строках. Пожалста помогите очень нужно, просто нет денег на заказ.
Вова, в этом случае универсальное решение сделать не получится - уж слишком много возможных вариантов расположения данных в Excel, и способов заполнения документов Word.
Оформляйте заказ на сайте - сделаю для вас макрос под ваши требования.
Подскажите пожалуйста, как сделать так, чтобы макрос формировал один документ ворд на основании данных из нескольких строк Excel?
А как реализовать те же возможности, только используя функцию слияния в Word. Чтобы каждый новый раз не формировался новый документ а запись делалась на новой странице?
Теперь доступна новая версия универсальной программы формирования документов по шаблонам.
Программа очень удобна для быстрого создания договоров и приказов, заполнения актов и инструкций, печати писем и соглашений, заполнения путевых листов и извещений, распечатки протоколов и соглашений, подстановки данных в шаблоны заявлений и доверенностей.
Количество файлов-шаблонов (Word, Excel, TXT) неограничено.
Замечательно. Я, долгое время искал нечто подобное. Но к счасливой случайности вышел на Ваш сайт. Установил панели для VBA. И ещё коу-что. Практически разобрался в работе данного макроса. В VBA я, недавно. Но поставил перед собой задачу изучить его. Для этого я, решил составить программу для заполнения бланков аттестатов о среднем образовании и бланков дипломов об окончании ПТУ. До этого они заполнялись вручную. Задачу в Excel, я, программно решил, не безВашего в ней участия, некоторые фрагменты кода. У меня база заполняется посредством форм в виде развёрнутого аттестата. А, вот транспортировка данных в Word с листов - разворот и последняя страница. Как-то чуть-чуть не вяжется с общим видом программы. Нельзя-ли макрос транспортировки "засунуть" под форму? Если можно, то не смогли бы Вы посоветовать мне как это сделать. Делаю эту программу потому, что на Украине все мучаются с авторизованым заполнением бланков об окончании учебных заведений. А, так я бы мог бесплатно, это моё безусловное кредо, предоставить программу желающим. Заранее Вам благодарен. Помогая мне Вы помогаете и до того замордованым классным руководителям школ Украины.
Читайте также: