Страницы: 1
RSS
Массовое создание *.docx файлов из списка в эксель.
 
Добрый день,

Нужно решить такую задачу, чтобы из списка в эксель как-то на диске создавались файлы *.docx с названиями из списка.
Например, в эксель список
Москва
Пенза
Псков
Воронеж

нужно, чтобы на диске создались 4 пустых  *.docx с названиями этих городов.

В архивной теме нашел похожий вопрос, но там макрос создает в папке на диске файлы *.xls с названиями, которые были указаны в эксель.
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=6874

Такое можно решить средствами эксель?
 
Цитата
Rulsan написал:
Такое можно решить средствами эксель?
можно. НО пока Вы сами не приложите усилий для решения своей задачи - не факт, что кто-то будет решать эту задачу за Вас с нуля.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Делаете шаблон своего документа, затем в цикле по списку делаете копии этого шаблона с нужным названием - Вам ведь не просто нужен пустой лист, а наверняка нужно какое-то наполнение, а такой подход самый практичный и простой для такой задачи.
 
Hugo, да, наполнение будет.
Вообще планировалась такая задача. Нужно сделать много одинаковых файлов по одному шаблону (ну типа, Здравствуйте, "имя", с вами заключен договор "номер", "город" и т.д.). Через слияние ворд и эсксель я могу сделать, чтобы были получены все нужные письма, но итоговый файл будет один и в нем все письма. То есть нужно сделать много пустых файлов ворд, туда копипастить нужные данные и давать названия городов. Я думал, как-то шаг создания массы вордовских файлов с названиями городов ускорить, чтобы потом просто открывать нужный файл и копировать туда готовое письмо.  
Изменено: Rulsan - 23.01.2019 11:30:39
 
Может так подойдет, но если документы заполнить и запустить макрос повторно то все файлы заменятся без предупреждения.

Скрытый текст
"Все гениальное просто, а все простое гениально!!!"
 
Nordheim, спасибо! Именно так я и хотел. Единственное, в названиях файлов, помимо города, добавляется порядковый номер Псков1.doc, Москва2.doc. Я, если честно не знаю VBA, интуитивно пытался найти, что отвечает за добавление цифр к названию и убрать, но выдает ошибку.  
 
Код
Wdoc.SaveAs2 Filename:=ThisWorkbook.Path & Application.PathSeparator & Cells(i, 1).Value & i & ".docx"

замените на
Код
Wdoc.SaveAs2 Filename:=ThisWorkbook.Path & Application.PathSeparator & Cells(i, 1).Value & ".docx"

Цикл произвольный не фиксирует количество строк, поэтому или нужно код доделывать или ручками каждый раз менять верхний предел.
Изменено: Nordheim - 23.01.2019 14:33:04
"Все гениальное просто, а все простое гениально!!!"
 
Все получилось! Спасибо огромное!  ;)  
 
И получили кучу пустых файлов.
А если брать шаблон с предопределёнными полями, то их можно по ходу дела ещё и заполнить данными из Экселя, из той же строки, где город прописан.
И такие примеры наверняка тут на форуме были, а может и в приёмах есть.
 
Hugo, благодарю, поищу пример на форуме, тоже неплохая идея.
Хотя все было бы намного проще, если бы Ворд делал слияние на отдельные листы, а не в 1 файл. Так он все закидывает в один многостраничный файл, и приходится изощряться.  
 
Вот у меня в загашнике лежит (правда тут без цикла):
Код
Sub Вставить_в_отчет()

Dim WA As Object, WD As Object

Set WA = CreateObject("Word.Application")
Set WD = WA.Documents.Open("C:\ШАБЛОНЫ\связка\shablon.docx")

WD.Range.Find.Execute FindText:="{$НОМПАТЕНТ01}", ReplaceWith:=Cells(2, 2), Replace:=2
WD.Range.Find.Execute FindText:="{$Наименовпатент01}", ReplaceWith:=Cells(2, 3), Replace:=2
WD.Range.Find.Execute FindText:="{$Названпатент01}", ReplaceWith:=Cells(2, 4), Replace:=2
WD.Range.Find.Execute FindText:="{$МПКпатент01}", ReplaceWith:=Cells(2, 5), Replace:=2
WD.Range.Find.Execute FindText:="{$датапублпатент01}", ReplaceWith:=Cells(2, 6), Replace:=2
WD.Range.Find.Execute FindText:="{$Статуспатент01}", ReplaceWith:=Cells(2, 7), Replace:=2
WD.Range.Find.Execute FindText:="{$Имязаявит01}", ReplaceWith:=Cells(2, 8), Replace:=2
WD.Range.Find.Execute FindText:="{$Номерзаявк01}", ReplaceWith:=Cells(2, 9), Replace:=2
WD.Range.Find.Execute FindText:="{$Датаподачзаяв01}", ReplaceWith:=Cells(2, 10), Replace:=2
WA.Visible = True
Set WA = Nothing

End Sub

Осталось соорудить такой шаблон, ну и приладить цикл по листу и сохранение результата.
 
Hugo, благодарю, буду пробовать.  
 
только учитывайте, что метод Find в Word, при вызове из VBA вставит единовременно текст не более 255 символов(аргумент ReplaceWith). Если больше - получите ошибку.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
а лучше в Работе сразу написать ТЗ и за деньги все сделать, как Вам хотелось бы со всеми копи пастами. Думаю, много денег не возьмут. Но Вам будет намного удобнее и лучше
Страницы: 1
Наверх