VBA MailMerge长度> 255

时间:2012-11-28 14:01:06

标签: vba ms-office word-vba office-2010 mailmerge

我正在尝试将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)

它为一个字符串输出255,例如500个字符。

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

问题:

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

1 个答案:

答案 0 :(得分:1)

我没有尝试过,但以下情况可能有效:

  1. 您创建一个文档变量来保存您在此字段的邮件合并主文档中使用DOCVARIABLE字段的全文而不是MERGEFIELD字段

  2. 在MailMergeBeforeRecordMerge事件中
  3. 一个。暂时将MERGEFIELD字段插入允许您轻松提取结果的位置(例如,在文档的开头)

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

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

    d。删除您插入的字段

    即根据需要操纵文本

    F。将结果放在文档变量

    克。如有必要,请更新DOCVARIABLE字段。

  4. 警告 - 我不记得细节但是某些版本的Word与DOCVARIABLE字段中的某些字符不能很好地匹配,特别是如果它们在表格内。

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