Потеря формата с макросом MS Word Mailmerge

Используя MS Word 2010, я хочу, чтобы Mailmerge запускался с макросом, сохраняя каждую запись в виде отдельного файла в формате PDF, используя одно из полей в качестве имени файла. Это сэкономит мне массу времени.

У меня проблема в том, что формат ПОЛНОСТЬЮ теряется, как будто это просто копирование текста и вставка его в новый документ. Есть ли способ защитить форматирование, так как без него это довольно бесполезно...

Заранее спасибо.

Sub splitter()

Dim i As Integer
Dim Source As Document
Dim Target As Document
Dim Letter As Range
Dim oField As Field
Dim FileNum As String

Set Source = ActiveDocument

ActiveDocument.MailMerge.DataSource.ActiveRecord = wdLastRecord

For i = 1 To ActiveDocument.MailMerge.DataSource.ActiveRecord
    ActiveDocument.MailMerge.DataSource.ActiveRecord = i
    Set Letter = Source.Range
        For Each oField In Letter.Fields
        If oField.Type = wdFieldMergeField Then
            If InStr(oField.Code.Text, "INV_ID") > 0 Then
            FileNum = oField.Result
            End If
        End If
        Next oField
    Set Target = Documents.Add
    Target.Range = Letter
    Target.SaveAs2 "C:\BACS\INVOICING\INVOICES\Word Export\" & FileNum, 17
    Target.Close
    Next i
End Sub

person user2032006    schedule 01.02.2013    source источник


Ответы (2)


Как насчет использования Сохранить?

Этот пример кода перебирает каждый элемент слияния в документе слияния, открывает элемент как письмо и сохраняет его в формате PDF, используя поле в источнике данных в качестве имени файла. Нет кодирования ошибок и попыток проверить наличие повторяющихся имен файлов. Это фрагмент.

Dim iRec As Integer
Dim docMail As Document
Dim docLetters As Document


Set docMail = ActiveDocument

''There is a problem with the recordcount property returning -1
''http://msdn.microsoft.com/en-us/library/office/ff838901.aspx
docMail.MailMerge.DataSource.ActiveRecord = wdLastRecord
iRec = docMail.MailMerge.DataSource.ActiveRecord

docMail.MailMerge.DataSource.ActiveRecord = wdFirstRecord

For i = 1 To iRec
    With docMail.MailMerge
        .Destination = wdSendToNewDocument
        .SuppressBlankLines = True
        With .DataSource
            .FirstRecord = i
            .LastRecord = i
            '' This will be the file name
            '' the test data source had unique surnames
            '' in a field (column) called Surname
            sFName = .DataFields("Surname").Value
        End With
        .Execute Pause:=False
        Set docLetters = ActiveDocument
    End With
    docLetters.ExportAsFixedFormat OutputFileName:= _
        "Z:\docs\" & sFName & ".pdf", ExportFormat:= _
        wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:= _
        wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
        Item:=wdExportDocumentContent, IncludeDocProps:=True, KeepIRM:=True, _
        CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
        BitmapMissingFonts:=True, UseISO19005_1:=False
    docLetters.Close False

    docMail.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next
person Fionnuala    schedule 01.02.2013

Во-первых, позвольте мне отдать должное, потому что я абсолютно ничего не смыслю в написании макросов. На самом деле это моя первая попытка использовать макрос, не говоря уже об изменении кода. Вооружившись только 24-летним знанием Бейсика (да, оригинала, не Visual Basic) и Фортрана (нет, не перфокарты Фортана, но очень близкого), я взял макрос Мистера Радунера с http://raduner.ch/blog/microsoft-word-mail-merge-into-single-documents , код макроса Remou для создания pdf-файлов выше и несколько других, а также различные аспекты и PRESTO!!! Мне явно очень повезло, но это работает в MS Word 2010. Надеюсь, что это работает и для всех остальных. Я загружаю как отдельного создателя PDF, так и отдельного создателя файла Word. Я надеюсь, что кто-нибудь, знающий Visual Basic, исправит это и сделает его более удобным для всех остальных.

ИНДИВИДУАЛЬНЫЙ МАКРОС ФАЙЛА СЛОВА (обратите внимание, что в источнике данных Excel должен быть столбец «Имя файла»):

Sub SaveIndividualWordFiles()
Dim iRec As Integer
Dim docMail As Document
Dim docLetters As Document
Dim savePath As String

Set docMail = ActiveDocument
''There is a problem with the recordcount property returning -1
''http://msdn.microsoft.com/en-us/library/office/ff838901.aspx

savePath = ActiveDocument.Path & "\"

docMail.MailMerge.DataSource.ActiveRecord = wdLastRecord
iRec = docMail.MailMerge.DataSource.ActiveRecord
docMail.MailMerge.DataSource.ActiveRecord = wdFirstRecord

For i = 1 To iRec
 With docMail.MailMerge
    .Destination = wdSendToNewDocument
    .SuppressBlankLines = True
    With .DataSource
        .FirstRecord = i
        .LastRecord = i
        '' This will be the file name
        '' the test data source had unique surnames
        '' in a field (column) called FileName
        sFName = .DataFields("FileName").Value
    End With
    .Execute Pause:=False
    Set docLetters = ActiveDocument
  End With

' Save generated document and close it after saving
        docLetters.SaveAs FileName:=savePath & sFName
        docLetters.Close False

  docMail.MailMerge.DataSource.ActiveRecord = wdNextRecord
Next
End Sub
person Spanky    schedule 06.12.2013