Страницы: 1
RSS
Создание файла Word из Excel, редактирование существующего макроса
 
Здравствуйте!

Есть макрос Excel который создает документ Word по шаблону. Необходимо внести изменения в код макроса таким образом чтобы:
1) Шаблоны хранились в папке "ШАБЛОНЫ (нужно чтобы хранились здесь)"
2) Готовые Договора сохранялись в папку "ДОГОВОРА (нужно чтобы сохранялись сюда)"
При этому если перемещается вся папка "CreateWordDocuments", в которой хранится файл с макросом "договор" и папки "ШАБЛОНЫ (нужно чтобы хранились здесь)" , "ДОГОВОРА (нужно чтобы сохранялись сюда)", маршрут должен подстраиваться под расположение файл с макросом "договор"

Пример прилагаю.

Заранее спасибо за помощь:)
Код
Const ИмяФайлаШаблона = "шаблон.dot"
Const КоличествоОбрабатываемыхСтолбцов = 11
Const РасширениеСоздаваемыхФайлов = ".doc"
Sub СформироватьДоговоры2()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "C").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub
    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"
    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word
    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(3)) & " " & Trim$(.Cells(4)) & " " & Trim$(.Cells(5))
            Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов
            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True
                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .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
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: WD.Close False: DoEvents
            p = p + a
        End With
    Next row
    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit False: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub

Function NewFolderName() As String
    NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Договоры, сформированные " & Get_Now)
    MkDir NewFolderName
End Function
Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
 
Доброго всем времени суток!
После 4 часов проб и ошибок у меня получилось найти решение проблем с сохранением файла в нужное место. Все работает делюсь кодом макроса, может быть пригодится Вам.

Но возникли две новые трудности:
1) Как сделать так чтобы файл Word после сохранения открывался автоматически
тут у меня есть понимание что нужно внести коррективы в строку
WD.SaveAs Filename: WD.Close False: DoEvents
, но чтобы я не делал файл не открываются автоматически:

2) Как сохранить файл в формате PDF а не DOC
тут тоже есть догадка что нужно использовать метод ExportAsFixedFormat, но я не понимаю как его правильно применить.

Заранее спасибо за помощь:)
Код
Const ИмяФайлаШаблона = "ШАБЛОНЫ/шаблон2.dot"
Const ИмяФайлаДоговора = "ДОГОВОРА/Договоры"
Const КоличествоОбрабатываемыхСтолбцов = 11
Const РасширениеСоздаваемыхФайлов = ".doc"Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    ПутьДоговора = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора)
    'НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "C").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(3)) & " " & Trim$(.Cells(4)) & " " & Trim$(.Cells(5) & Get_Now)
            Filename = ПутьДоговора & ФИО & РасширениеСоздаваемыхФайлов            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .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
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: WD.Close False: DoEvents
            'WD.PrintOut: WD.Close False: DoEvents печать без сохранения
            p = p + a
        End With
    Next row    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit True: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub




'Function NewFolderName() As String
   ' NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора & Get_Now)
   ' MkDir NewFolderName
'End FunctionFunction Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
Изменено: khmelae - 15.01.2017 02:59:58
 
Цитата
khmelae написал:
использовать метод ExportAsFixedFormat, но я не понимаю как его правильно применить
записать в Word сохранение файла в PDF. Будет готовый код.
Цитата
khmelae написал:
чтобы файл Word после сохранения открывался автоматически
достаточно его просто не закрывать, я думаю. В этой строке:
WD.SaveAs Filename: WD.Close False: DoEvents
просто удалите
WD.Close False:
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
The_Prist  спасибо за Ваш ответ. К сожалению просто удаление "WD.Close False: " не помогает сохраненные файлы не открываются автоматически. я уже попробовал разные варианты
1) WD.SaveAs Filename: WD.Open True: DoEvents   'сохранить и открыть
2) WD.Open Filename: DoEvents 'открыть без сохранения
Но увы ничего не работает(((

C сохранением в PDF тоже не выходит, по Вашему совету сделал запись макроса "сохранение файла DOC в PDF". Попытался по подобию сделать, но ничего не получилось(((
1) WD.ExportAsFixedFormat OutputFilename: ExportFormat: wdExportFormat , PDFOpenAfterExport:=True
2) WD.ExportAsFixedFormat Filename: WD.Close False: DoEvents


Пока мой метод проб и ошибок не приносит результата...
 
Цитата
khmelae написал:
сохраненные файлы не открываются
Они вообще у Вас создаются? Если каждый файл не закрывать - то он останется открытым, что приведет ровно к тому же эффекту, что закрыть-открыть. Поэтому приведенное мной решение работать должно без проблем, если только у Вас не возникает где-то раньше ошибка кода. Приведите код полностью как Вы там чего изменили.

Строка сохранения в PDF у Вас не рабочая - ознакомьтесь со статьей: Как из Excel обратиться к другому приложению
Потому что нет у Excel понятия, что такое wdExportFormat. И то ли у Вас опечатка, то ли там знака равно после двоеточия не хватает. Выглядеть в итоге должно как-то так:
Код
WD.ExportAsFixedFormat OutputFileName:=Filename, ExportFormat:=17
только Filename должно так же отдельно формироваться для PDF, чтобы формат был именно .pdf, а не .doc. Т.е. надо создать доп.переменную, такую же как Filename и назначать ей значение. После строки:
Код
Filename = ПутьДоговора & ФИО & РасширениеСоздаваемыхФайлов
записать еще одну:
Код
FilenamePDF = ПутьДоговора & ФИО & ".pdf"
и для сохранения в PDF использовать её:
Код
WD.ExportAsFixedFormat OutputFileName:=FilenamePDF, ExportFormat:=17
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Цитата
khmelae написал:
но чтобы я не делал файл не открываются автоматически
Он открывается, только в скрытом режиме.
Отобразите word на экране
Код
 WA.Visible = True
 
Добрый вечер!
Большое спасибо за помощь The_Prist.
Вопрос с сохранением в формате .pdf решен, все работает. рабочий код см. ниже. Было достаточно внести два изменения:
...
Const РасширениеСоздаваемыхФайлов = ".pdf"
...
WD.ExportAsFixedFormat OutputFileName:=Filename, ExportFormat:=17 ' сохранение в pdf
WD.Close False: DoEvents ' закрытие файла
...

Код
Const ИмяФайлаШаблона = "ШАБЛОНЫ/1401-1.dotx"
Const ИмяФайлаДоговора = "ПЕЧАТНЫЕ ФОРМЫ/1401-1"
Const КоличествоОбрабатываемыхСтолбцов = 134
Const РасширениеСоздаваемыхФайлов = ".pdf"
Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    ПутьДоговора = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора)
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "DA").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub
    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"
    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word
    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            НазваниеФайла = " " & Trim$(.Cells(105)) & " " & Get_Now
            Filename = ПутьДоговора & НазваниеФайла & РасширениеСоздаваемыхФайлов
            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", НазваниеФайла
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", НазваниеФайла
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True
                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .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
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", НазваниеФайла, " "
            WD.ExportAsFixedFormat OutputFileName:=Filename, ExportFormat:=17 ' сохранение в pdf
            'WD.SaveAs Filename: WD.Close False: DoEvents
            'WD.PrintOut: WD.Close False: DoEvents 'печать без сохранения
            WD.Close False: DoEvents
            p = p + a
        End With
    Next row
    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit True: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & ПутьДоговора
    MsgBox msg, vbInformation, "Готово"
    
End Sub

'Function NewFolderName() As String
   ' NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора & Get_Now)
   ' MkDir NewFolderName
'End Function

Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
Изменено: khmelae - 17.01.2017 00:25:51
 
Цитата
The_Prist написал:
Они вообще у Вас создаются?
Да создаются, я прикрепил вложение можете проверить.

По вопросу автоматического открытия / не закрытия сохраненного документа пока решения не нашел
The_Prist.  Ваш вариант с удалением из кода "WD.Close False:" кажется логичным и правильным, но почему то не работает.
У меня есть одна догадка, суть работы макроса заключается в открытии файла шаблона DOT замене необходимых полей и сохранением файлов в формате DOС. При этом насколько я понимаю в процессе работы макроса сами созданные файлы DOС не открываются. Поэтому может быть эту проблему можно решить через открытие созданных документов DOС, но как правильно это сделать для меня пока не ясно(((

Цитата
RAN написал:
Он открывается, только в скрытом режиме.
Отобразите word на экране
Код ? 1WA.Visible = True
RAN я не совсем понимаю куда можно применить данный метод "WA.Visible = True "
Код
Const ИмяФайлаШаблона = "ШАБЛОНЫ/шаблон2.dot"
Const ИмяФайлаДоговора = "ДОГОВОРА/Договоры"
Const КоличествоОбрабатываемыхСтолбцов = 11
Const РасширениеСоздаваемыхФайлов = ".doc"
Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    ПутьДоговора = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора)
    'НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "C").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub
    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"
    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word
    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(3)) & " " & Trim$(.Cells(4)) & " " & Trim$(.Cells(5) & Get_Now)
            Filename = ПутьДоговора & ФИО & РасширениеСоздаваемыхФайлов
            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True
                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .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
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: DoEvents ' сохранить и открыть/незакрывать
            'WD.SaveAs Filename: WD.Close False: DoEvents ' сохранить и закрыть
            'WD.PrintOut: WD.Close False: DoEvents ' печать без сохранения
            p = p + a
        End With
    Next row
    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit True: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub





'Function NewFolderName() As String
   ' NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора & Get_Now)
   ' MkDir NewFolderName
'End Function
Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function

Изменено: khmelae - 17.01.2017 01:35:39
 
khmelae, а что нужно изменить в коде ,что бы можно было формировать  один договор ,выделили в таблице  ячейку "Прізвище" Дзюба и получили договор по конкретной Фамилии.
 
Цитата
khmelae написал:
в процессе работы макроса сами созданные файлы DOС не открываются
открываются. И даже по коду видно, что открываются, заполняются и далее СОХРАНЯЮТСЯ КАК. А это значит, что они остаются открытыми. Об этом же говорит строка WD.Close, т.к. если бы они не были открыты - зачем их закрывать?
Просто, вполне очевидно, что Вам надо еще убрать строку WA.Quit. Это закрытие Word-а полностью. А вместе с ним, естественно, закрываются и все документы.
Цитата
khmelae написал:
не совсем понимаю куда можно применить данный метод "WA.Visible = True "
сразу после строки:
Код
Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Ооо то что надо спасибо The_Prist, теперь я понял как применить идею RAN, ему тоже спасибо за помощь.

И так позволю себе подвести промежуточные итоги по улучшению данного макроса. Пример подкрепляю к данному сообщению, код макроса с различными вариантами его работы выкладываю ниже.

Цитата
Logistic написал:
а что нужно изменить в коде ,что бы можно было формировать  один договор ,выделили в таблице  ячейку "Прізвище" Дзюба и получили договор по конкретной Фамилии.
Logistic я к сожалению не так хорошо разбираюсь в написании макросов чтобы, так просто и легко написать Вам изменение для формирования договора по выделенной ячейки, могу сказать одно что это точно можно реализовать, т.к. я видел похожие решения на др. форумах, но как реализовать конкретно для этого макроса я не подскажу. Попробуйте обратится к Богу Excel The_Prist ;), он думаю сможет подсказать идеи.
Но я могу предложить рабоче-крестьянский вариант выполнения Вашей Logistic задачи без внесения изменений в данный макрос. Как вариант можно использовать формулу ВПР и дополнительный столбец с отметкой какую строку нужно сформировать как договор, это если надо сформировать только один договор из списка (пример во вложении). Если же Вам необходимо сформировать несколько договоров то можно использовать ВПР + массив. Если не разберетесь пишите ;)

Код
Const ИмяФайлаШаблона = "ШАБЛОНЫ/шаблон2.dot"
Const ИмяФайлаДоговора = "ДОГОВОРА/Договоры"
Const КоличествоОбрабатываемыхСтолбцов = 19
Const РасширениеСоздаваемыхФайлов = ".doc"
Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    ПутьДоговора = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора)
    'НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "K").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub
    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"
    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word
    WA.Visible = True ' отобразить Word
    
    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(11)) & " " & Trim$(.Cells(12)) & " " & Trim$(.Cells(13) & Get_Now)
            Filename = ПутьДоговора & ФИО & РасширениеСоздаваемыхФайлов
            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents
            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 11 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True
                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .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
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: 'сохранить созданый документ
            'или
            'WD.ExportAsFixedFormat OutputFileName:=Filename, ExportFormat:=17 ' сохранение в pdf
            'или
            'WD.PrintOut:'печать без сохранения
            
            'WD.Close False: DoEvents 'закрыть созданый документ Word
            
            p = p + a
        End With
    Next row
    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    'WA.Quit True: 'закрыть приложение Word
    pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub





'Function NewFolderName() As String
   ' NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаДоговора & Get_Now)
   ' MkDir NewFolderName
'End Function
Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function

 
Изменено: khmelae - 18.01.2017 00:43:20
 
Доброго времени суток.
Подскажите пожалуйста, какие параметры надо изменить в коде макроса, если мне надо добавить слева один столбик и сверху 8 строк?
Поменял в строках:
r = Cells(Rows.Count, "B").End(xlUp).row: rc = r - 10
For Each row In ActiveSheet.Rows("11:" & r)
ФИО = Trim$(.Cells(2)) & " " & Trim$(.Cells(3)) & " " & Trim$(.Cells(4))
Вордовские документы формируются, но данные не вставляются.
 
Сделал.
Код
FindText = Cells(9, i): ReplaceText = Trim$(.Cells(i)) 'менять номер строки с фигурными скобками
Ещё ошибки возникают, если объединённая ячейка попадается ((
Страницы: 1
Читают тему
Наверх