0

我有一个连接到 SQL 服务器数据库的非常简单的邮件合并

邮件合并上有两个字段,一个是

{MERGEFIELD Dealer_Name}

另一个是下面的IF字段

{IF {MERGEFIELD Dealer_Name}="Joe" "1" "0"}

但是 IF 字段不执行。Dealer_Name 合并字段确实执行并显示每个经销商名称或每个页面,但 IF 字段仅显示为Dealer_Name}=

也可以编写一个 VBA 函数或过程,然后将其作为字段或合并按钮或其他东西添加到 word 邮件合并文档中。

例如,假设我有以下 VBA 程序

Public Sub PrintSomeText  
  Selection.TypeText("Hello World")
End Sub

我可以将它作为宏或其他东西添加到邮件合并文档中,以便它在放置在文档上的位置的每个页面上打印出“Hello World”吗?

4

1 回答 1

0

我能够让 IF 字段代码工作,不知道如何,它刚刚开始工作。

我还发现您可以通过使用 DOCVARIABLE 或 REF 域代码在 Word 邮件合并文档中使用 VBA 代码。

对于其他有此问题的人:

像这样添加一个文档变量:

{DOCVARIABLE MyVariable}

或像这样的书签参考:

{REF MyBookmarkReference}

然后在 VBA (Alt+F11) 中执行以下操作:

在 Project(项目名称)中,例如 Project(MailMergeDemo) 在“Microsoft Word Objects”下双击“ThisDocument”

并输入以下代码

Dim WithEvents app As Application

Private Sub Document_Close()
  Set app = Nothing
End Sub

Private Sub Document_Open()
  Set app = Application
End Sub

从下拉列表中选择应用程序对象,然后选择 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

您将需要关闭并重新打开文档以挂钩应用程序对象。

有关详细信息,请参阅http://support.microsoft.com/kb/285333

于 2011-05-31T05:20:41.200 回答