Вопрос возник в процессе заполнения печатных форм с использованием слияния.
Задача:
В процессе MailMerge нужно одно из полей MergeField разбить на отдельные символы и этими символами заполнить указанные места в документе.
Мой вариант решения:
Написан обработчик события MailMergeBeforeMerge, который срабатывает перед каждым слиянием.
В этом событии выполнялся find and replace, для заранее вписанных в документ меток на выбранный символ из нужного поля.
Данный код работал на тестовой среде, но на сервере заказчика этот код не работает.
Далее была попытка использовать DocVariable, но их подстановка осуществляется до начала слияния.
Дополнение:
- код по замене работает если написать его в открытие документа
- событие MailMergeBeforeMerge срабатывает, но код не выполняет замену, при этом никаких ошибок не выдает.
Код:
PHP код:
Private Sub Document_Open()
Set wdapp = Word.Application
End Sub
Private Sub wdapp_MailMergeBeforeMerge(ByVal Doc As Document, ByVal StartRecord As Long, ByVal EndRecord As Long, Cancel As Boolean)
With Selection.Find
.ClearFormatting
.Text = "#1"
.Replacement.ClearFormatting
.Replacement.Text = Mid(Doc.MailMerge.DataSource.DataFields(5).Value, 1, 1)
.Execute Replace:=wdReplaceAll, Forward:=True, _
Wrap:=wdFindContinue
End With
End Sub
Вопрос, либо как сделать, чтобы такой вариант работал, либо найти альтернативный вариант.