3

我正在尝试将 MailMerge 与 Word 2010 一起使用。

我有一个 TAB 分隔的文件 database.dat,如下所示:

ID       Name       Street
1        John       FooBar 1
2        Smith      FooBar 2

此文件在 Word 中使用以下 VBA 代码:

ActiveDocument.MailMerge.OpenDataSource Name:="C:/database.dat", _
    ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    AddToRecentFiles:=False, Revert:=False, Format:=wdOpenFormatAuto

我现在可以在文本中使用文件中的字段。所以一切正常。

问题:

我需要对 VBA 中的数据做一些进一步的阐述,所以我获取 MergeField 值:

Function getInfoField(mergefield As String)
    On Error GoTo MergeFieldNotFound:
    getInfoField = ActiveDocument.MailMerge.DataSource.DataFields(mergefield).Value
    GoTo EndFunc
MergeFieldNotFound:
    getInfoField = ""
EndFunc:
End Function

但如果合并字段值的长度超过 255 个字符,它将被截断。所以如果我插入

MsgBox Len(ActiveDocument.MailMerge.DataSource.DataFields(mergefield).Value)

它为具有例如 500 个字符的字符串输出 255。

但直接在 word 文档中,所有 500 个字符都显示为合并字段。

问题:

如何从 VBA 的合并字段中获取超过 255 个字符?

4

1 回答 1

2

我还没有尝试过,但以下方法可能有效:

  1. 您创建一个文档变量来保存全文 您在 Mail Merge Main 文档中为此字段使用 DOCVARIABLE 字段而不是 MERGEFIELD 字段

  2. 在 MailMergeBeforeRecordMerge 事件中,您

    一个。将 MERGEFIELD 字段临时插入到可以轻松提取其结果的位置(例如,在文档的开头)

    湾。如有必要,更新字段(例如 Doc.Fields(1).Update)

    C。检索文本(Doc.Fields(1).Result.Text

    d。删除您插入的字段

    e. 根据需要操作文本

    F。将结果放入文档变量

    G。如有必要,更新 DOCVARIABLE 字段。

请注意 - 我不记得详细信息,但某些版本的 Word 不能很好地处理 DOCVARIABLE 字段中的某些字符,尤其是当它们位于表格内时。

否则,我认为您将不得不尝试打开与该文件的另一个连接(例如,可以使用 ADO 和 Jet/ACE 提供程序+文本文件 IISAM 来执行此操作),这可能会使提取文本更容易,但是您必须拥有一种机制(例如唯一键),以使您能够通过 ADO 检索正确的记录,如当前在 MailMerge 中选择的那样。

于 2012-12-21T18:11:37.360 回答