#vba #ms-word #mailmerge
#vba #ms-word #mailmerge
Вопрос:
У меня есть очень простое слияние почты, которое подключено к базе данных SQL Server
В слиянии почты есть два поля, одно из которых
{MERGEFIELD Dealer_Name}
другим является следующее поле IF
{IF {MERGEFIELD Dealer_Name}="Joe" "1" "0"}
Однако поле «ЕСЛИ» не выполняется. Поле слияния Dealer_Name выполняется и отображает имя каждого дилера или каждую страницу, но поле IF отображается просто как Dealer_Name}=
Также возможно ли написать функцию или процедуру VBA, а затем добавить ее в документ слияния почты word в качестве поля или кнопки слияния или чего-то еще.
Допустим, у меня есть следующая процедура VBA
Public Sub PrintSomeText
Selection.TypeText("Hello World")
End Sub
Могу ли я добавить это в документ слияния почты в виде макроса или чего-то еще, чтобы он выводил «Hello World» на каждой странице в том месте, где он был помещен в документ?
Комментарии:
1.
If
Тот, как он был введен? Вы нажимали Ctrl F9, когда вводили его?
Ответ №1:
Я смог заставить код поля IF работать, не уверен как, он только начал работать.
Также я обнаружил, что вы можете использовать код VBA в документах слияния почты Word, используя коды полей DOCVARIABLE или REF.
Для всех, у кого есть эта проблема:
Добавьте переменную документа, подобную этой:
{DOCVARIABLE MyVariable}
или ссылка на закладку, подобная этой:
{REF MyBookmarkReference}
Затем в VBA (Alt F11) выполните следующее:
В Project (название проекта), например Project (MailMergeDemo) В разделе «Объекты Microsoft Word» Дважды щелкните «Этот документ»
и введите следующий код
Dim WithEvents app As Application
Private Sub Document_Close()
Set app = Nothing
End Sub
Private Sub Document_Open()
Set app = Application
End Sub
Выберите объект app из выпадающего списка, а затем выберите событие app_MailMergeBeforeRecordMerge и введите следующий код:
Private Sub app_MailMergeBeforeRecordMerge(ByVal Doc As Document, Cancel As Boolean)
Doc.Variables("MyVariable").Value = Doc.MailMerge.DataSource.DataFields(SomeFieldName).Value
Doc.Bookmarks("MyBookmarkReference").Range.Text = "this is a test"
Doc.Fields.Update
End Sub
Вам нужно будет закрыть и снова открыть документ, чтобы подключить объект application.
Пожалуйста, обратитесь к http://support.microsoft.com/kb/285333 для получения дополнительной информации.