Проблема с полем слияния почты IF и VBA

#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 для получения дополнительной информации.