Страницы: 1
RSS
Замена значений из Excel в Word c сохранением docx-файла
 
Добрый день!
Собираю макрос который по меткам в Word заменяет значения на значения из ячеек в Excel и сохраняет документ по новому пути и присваивает новое имя из соответствующей ячейки.
файл template.docx - должен оставаться неизменным.
Помогите разобраться с колонтитулом и сохранением, почему-то не срабатывает (

Код
Sub ReplaceLabelDocSave()

    Dim objDocument As Object
    ColonText = Sheets("Лист1").Cells(4, 1).Text  'ячейка от куда берется значение для замены колонтитула
    NewPatchName = Sheets("Лист1").Cells(5, 1) 'имя файла и папки
    
 Set objWord = CreateObject("Word.Application")
    If Err.Number Then
       MsgBox "Не могу открыть Word!"
       Exit Sub
    End If
      
 Set objDocument = objWord.Documents.Open(Filename:="C:\temp2018\template.docx") 'Открываем документ
 
    'Замена колонтитула
 objDocument.ActiveWindow.ActivePane.View.SeekView = wdSeekCurrentPageFooter 'Открываем нижний колонтитул
 Set objDocument = objWord.ActiveDocument
    With objWord.Selection
        .Find.ClearFormatting
        .Find.Replacement.ClearFormatting
        .Find.Text = "@колонтитул"
        .Find.Replacement.Text = ColonText
        .Find.Execute Replace:=wdReplaceAll
    End With
      objDocument.ActiveWindow.ActivePane.View.SeekView = wdSeekMainDocument 'Закрываем колонтитул
      
    'Заменяем метки на значения из ячеек
    With objWord.Selection.Find
       .Text = "@метка1"
       .Replacement.Text = Range("A1")
       .Wrap = 1
       .Execute Replace:=2
       .Text = "@метка2"
       .Replacement.Text = Range("A2")
       .Wrap = 1
       .Execute Replace:=2
       .Text = "@метка3"
       .Replacement.Text = Range("A3")
       .Wrap = 1
       .Execute Replace:=2
    End With
    
     
    objWord.ActiveDocument.SaveAs Filename:=NewPatchName   'Сохранение документа в новую папку с новым именем
    
    objDocument.Close
    objWord.Quit
  
End Sub
Изменено: spacemakerman - 17.02.2018 01:35:38
Я только учусь
 
Код
objDocument.SaveAs ThisWorkbook.Path & "\test.doc"

Проверьте, если ли расширение в Вашем NewPatchName

О колонтитуле: сделайте там закладку и заполняйте ее:
Код
objDocument.Bookmarks("ля_ля_ля")...
 
Цитата
vikttur написал:
Проверьте, если ли расширение в Вашем NewPatchName
Спасибо, есть полный путь с именем файла, который будет генерироваться в зависимости от условий.



Цитата
vikttur написал:
О колонтитуле: сделайте там закладку и заполняйте ее:
как это сделать и где?
не совсем понимаю как применить Ваши коды (
Я только учусь
 
срабатывает только если так, но новый путь не создается
Код
objDocument.SaveAs ThisWorkbook.Path & "\" & NewPatchName & ".docx"
Я только учусь
 
Создавайте с расширением .doc

Вариант с закладками (bookmarks)
Код
Sub ReplaceLabelDocSave()
Dim objWord As Object, objDocument As Object
Dim NewPatchName As String
    Set objWord = CreateObject("word.application")
    Set objDocument = objWord.Documents.Open(Filename:="C:\temp2018\template.docx")
    objWord.Visible = True
    NewPatchName = Range("A5").Value

    objDocument.Bookmarks("b1").Range.Text = Range("A1").Value
    objDocument.Bookmarks("b2").Range.Text = Range("A2").Value
    objDocument.Bookmarks("b3").Range.Text = Range("A3").Value
    objDocument.Bookmarks("k1").Range.Text = Range("A4").Value
     
    objDocument.SaveAs Filename:=NewPatchName
    objDocument.Close: objWord.Quit
    Set objDocument = Nothing: Set objWord = Nothing
End Sub
 
vikttur, Вы бомибический оптимизатор  8-0
Со своим кодом разобрался, но у Вас прям перфект! )) Спасибо! ))

Про закладки не знал, очень удобно!  :idea:
Но с созданием папки макросом проблема, ни в какую не хочет, такое вообще возможно?
Я только учусь
 
Цитата
vikttur написал:
Вариант с закладками (bookmarks)
Сейчас наткнулся на маленький нюанс в решении с закладками - если в теле документа несколько одинаковых значений - это решается выделением через ctrl, но если одинаковые значения в теле документа и колонтитуле, то приходится дописывать в макрос строчки :) Но это мелочи)

прикрепил на всякий случай рабочий скрипт с заменой, может кому пригодится )
Я только учусь
 
Цитата
если одинаковые значения в теле документа и колонтитуле...
Да, разные закладки. По моему мнению, это правильнее: не нужно использовать поиск, в случае замены текста в коде ничего менять не нужно. В разные закладки можно передавать одно и то же значение.

О создании папки, если такой нет - не по теме. Вопрос может возникнуть не только у Вас, поэтому правильнее - создать отдельную тему.
 
Ребята, всем привет!

Я пытаюсь реализовать подобный макрос но не с закладками а с метками типа {метка}
Такие метки в шаблоне вордовском.
В качестве меток в рабочей книге используются имя ячейки и имя листа типа {Лист1}  так же в скобках

Так вот поиск и замену метки в шаблоне на значение из ячейки я реализовал.
Поиск среди листов листов со скобками тоже не составляет проблемы

ну допустим есть лист копируем его содержимое там таблица:
Код
Sheets("{List}").UsedRange.Copy
Вопрос в том как заменить в шаблоне метку  {List} на эту таблицу ???  
 
Ура решение подсказал автор оригинального макроса. Благодарю, Дмитрий!

Возможно кому то такой вариант будет удобней в использовании.
Скрытый текст
Страницы: 1
Читают тему
Наверх