Давно меня интересовал этот вопрос, но не было необходимости и времени. Теперь время нашлось, и, оказалось, это не так сложно: нужно всего лишь программно пройтись по записям, отправляя каждую из них в отдельный документ, а затем этот документ сохранить.
Текст, который нужно использовать в имени файла, нужно поместить в закладку, а имя закладки записать в константу OUTGOING
Sub SaveEachMergeToFile()
Dim oMergedDoc As Document
Const OUTGOING As String = "number"
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
oMergedDoc.MailMerge.DataSource.ActiveRecord = wdFirstRecord
Dim i As Integer
With oMergedDoc.MailMerge
For i = 1 To .DataSource.RecordCount
.Destination = wdSendToNewDocument
.SuppressBlankLines = True
With .DataSource
.FirstRecord = .ActiveRecord
.LastRecord = .ActiveRecord
End With
.Execute False
With Documents(1)
.SaveAs oMergedDoc.Path & "\" & oMergedDoc.Bookmarks(OUTGOING).Range.Text
.Close False
End With
.DataSource.ActiveRecord = wdNextRecord
DoEvents
Next
End With
MsgBox "Все документы слияния сохранены в папку """ & oMergedDoc.Path & """", vbInformation, "Сохранение документов после слияния"
End Sub
Лучше день потерять — потом за пять минут долететь!