Как сохранить коды полей после Word MailMerge (например, {FILENAME} в нижнем колонтитуле документа)

Я вставил поле {FILENAME} в нижний колонтитул моего исходного документа.

Когда я генерирую MailMerge с этим исходным документом и файлом данных, результирующий документ не показывает код поля - он был заменен жестко закодированным текстом, представляющим имя файла текущего документа - "Document1". Это код, показывающий, что я не делаю ничего особенного:

Call vActiveDocument.MailMerge.OpenDataSource(vDataSourcePath)
vActiveDocument.MailMerge.SuppressBlankLines = True

vActiveDocument.MailMerge.Destination = 0 'Send to new Document

Call vActiveDocument.MailMerge.execute(True)
Call vActiveDocument.Close(False)
Set vActiveDocument = vApplication.activedocument

Я что-то пропустил? Я ожидаю, что поле кода останется полем кода даже после операции mailmerge. Есть ли способ сказать Word "вычислить поля MERGEFIELD, но не вычислять другие поля формы".

В настоящее время я использую неуклюжий поиск и замену, но это действительно ужасно. некрасиво некрасиво некрасиво. Может даже квалифицироваться как взломать.

'//get current filename
fileName = vActiveDocument.Name

'//check if we need to replace foooter
If ( replaceFileNameInFooter) then

    '//Replacing current document filename with a computed field
    '//set view to footer
    vApplication.ActiveWindow.ActivePane.View.SeekView = 10

    '//Assing footer
    Set footer = vApplication.Selection.Range

    '//search for current filename -> example: FormLetters1
    footer.Find.Text = filename

    '//replace with a filename field -> Type 29
    While footer.Find.Execute()
        Call vApplication.Selection.Fields.Add(footer, 29)  
    Wend

    '//set main document mode
    vApplication.ActiveWindow.ActivePane.View.SeekView = 0

End if

1 ответ

Решение

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

Поместите нужный код поля (например, { FILENAME \p } в другой документ, добавьте его в закладки, например, используя "bm_filename_p", затем используйте

{ INCLUDETEXT "the full path+name of the document" bm_filename_p }

в вашем основном документе слияния.

После объединения все поля INCLUDETEXT сохраняются, но вам, вероятно, потребуется сохранить файл, а затем обновить поля в нижнем колонтитуле, чтобы получить желаемый результат. В этот момент, если вы хотите "исправить" результаты поля, вы можете сделать это обычным способом (заменить коды полей на их результаты), но если вы этого не сделаете, вам всегда будет нужен включенный файл в указанное место.

Хотя это работает с FILENAME и даже будет работать с полем, таким как { SEQ abc } в теле основного документа слияния, оно не работает, например, с { SEQ abc \c } в нижнем колонтитуле.

Один из способов облегчить задачу поиска и замены - это вставить поле { PAGE } с идентификатором, например так:

{ PAGE \#field_filename }

Эти поля также сохраняются после слияния, и их может быть немного легче найти / заменить (например, найдите поля { PAGE } и замените "PAGE #field_" на "", или что-то подобное).

Другие вопросы по тегам