Показать сообщение отдельно
Старый 23.05.2011, 14:56   #1  
griefon is offline
griefon
Участник
 
131 / 52 (2) ++++
Регистрация: 07.12.2010
Адрес: down under
Проблема с VBA for Word
Вопрос возник в процессе заполнения печатных форм с использованием слияния.

Задача:
В процессе 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 DocumentByVal StartRecord As LongByVal EndRecord As LongCancel As Boolean)

    
With Selection.Find
    
.ClearFormatting
    
.Text "#1"
    
.Replacement.ClearFormatting
    
.Replacement.Text Mid(Doc.MailMerge.DataSource.DataFields(5).Value11)
    .
Execute Replace:=wdReplaceAllForward:=True_
        Wrap
:=wdFindContinue
End With


End Sub 
Вопрос, либо как сделать, чтобы такой вариант работал, либо найти альтернативный вариант.