我正在尝试将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个字符?
答案 0 :(得分:1)
我没有尝试过,但以下情况可能有效:
您创建一个文档变量来保存您在此字段的邮件合并主文档中使用DOCVARIABLE字段的全文而不是MERGEFIELD字段
,
一个。暂时将MERGEFIELD字段插入允许您轻松提取结果的位置(例如,在文档的开头)
湾如有必要,请更新字段(例如Doc.Fields(1).Update)
℃。检索文本(Doc.Fields(1).Result.Text
d。删除您插入的字段
即根据需要操纵文本
F。将结果放在文档变量
中克。如有必要,请更新DOCVARIABLE字段。
警告 - 我不记得细节但是某些版本的Word与DOCVARIABLE字段中的某些字符不能很好地匹配,特别是如果它们在表格内。
否则,我认为您必须尝试打开另一个与该文件的连接(例如,可以使用ADO和Jet / ACE提供程序+文本文件IISAM执行此操作),这可能会更容易提取文本,但您必须有一个机制(例如唯一键),以使您能够通过ADO检索正确的记录,如当前在MailMerge中选择的那样。