Задача производственная. Поэтому хочется сделать процесс создания документов максимально автоматизированным.
Со слиянием у меня нет проблем, оно уже работает так как мне надо. Макрос (я думаю тут других вариантов нет) нужен для автоматического сохранения результатов слияния.
Вчера копался в коде получилось, что задачу минимум решил.
Выглядит это сейчас так:
Sub SaveEachMergeToFile()
Dim oMergedDoc As Document
Const OUTGOING As String = "contract"
If ActiveDocument.MailMerge.MainDocumentType <> wdNotAMergeDocument Then
Set oMergedDoc = ActiveDocument
Else
MsgBox "Активный документ должен быть создан слиянием.", vbExclamation, "Сохранение документов после слияния"
Exit Sub
End If
If Not oMergedDoc.Bookmarks.Exists(OUTGOING) Then
MsgBox "В документе нет закладки с именем " & OUTGOING & ", которая используется в качестве имени файла." & vbNewLine & _
"Создайте закладку с таким именем и запустите макрос ещё раз", vbExclamation, "Сохранение документов после слияния"
Exit Sub
End If
With oMergedDoc.MailMerge
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
.Execute False
With Documents(1)
.SaveAs oMergedDoc.Path & "\" & oMergedDoc.Bookmarks(OUTGOING).Range.Text & ".doc"
.Close False
End With
End With
MsgBox "Документ слияния сохранён в папку """ & oMergedDoc.Path & """", vbInformation, "Сохранение документов после слияния"
End Sub
этот макрос сохраняет мне текущую запись слияния в файл с именем закладки "filename" в каталог где расположен шаблон. Закладка "filename" определяет текст "ДОГОВОР{MERGEFIELD "contract"}"
Если говорить о задаче минимум то мне сейчас не нравится, что придётся во всех документах прописывать их будущее название, и если в договоре это есть в заголовке, то в остальных (СМЕТА, НАКЛАДНАЯ, АКТ) придётся это прописывать где то белым шрифтом мелкого кегля, чтобы не выводилось на печать. Но это уже чисто эстетическое замечание.
Если говорить о задаче максимум, то как я уже писал хотелось бы чтоб это был 1 шаблон (точнее два - для физ и юр лиц), который будет сохраняться в 4 документа с необходимыми мне именами. Ещё вчера вечером подумал было бы не плохо, чтоб создавалась папка с номером договора и туда все эти файлы сохранялись.
Т.е. на выходе чтобы получалось что вроде
C:\test\002-12\ДОГОВОР №002-12.doc
C:\test\002-12\СМЕТА №002-12.doc
C:\test\002-12\НАКЛАДНАЯ №002-12.doc
C:\test\002-12\АКТ №002-12.doc
где C:\test - каталог где расположен шаблон слияния (БД тоже там, но это не принципиально)
в настоящий момент пытаюсь адаптировать это
внешняя ссылка
для чтения прямо из полей (не из закладок) и создания папки
и это
внешняя ссылка
для сохранения из 1го документа-шаблона в 4.