首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VBA MailMerge长度> 255

VBA MailMerge长度> 255
EN

Stack Overflow用户
提问于 2012-11-28 14:01:05
回答 1查看 2K关注 0票数 4

我试图在Word 2010中使用MailMerge。

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

代码语言:javascript
复制
ID       Name       Street
1        John       FooBar 1
2        Smith      FooBar 2

Word中使用此文件的VBA代码如下:

代码语言:javascript
复制
ActiveDocument.MailMerge.OpenDataSource Name:="C:/database.dat", _
    ConfirmConversions:=False, ReadOnly:=False, LinkToSource:=True, _
    AddToRecentFiles:=False, Revert:=False, Format:=wdOpenFormatAuto

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

问题:

我需要对VBA中的数据做一些进一步的阐述,因此我使用以下方法获取MergeField值:

代码语言:javascript
复制
Function getInfoField(mergefield As String)
    On Error GoTo MergeFieldNotFound:
    getInfoField = ActiveDocument.MailMerge.DataSource.DataFields(mergefield).Value
    GoTo EndFunc
MergeFieldNotFound:
    getInfoField = ""
EndFunc:
End Function

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

代码语言:javascript
复制
MsgBox Len(ActiveDocument.MailMerge.DataSource.DataFields(mergefield).Value)

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

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

问题:

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-21 18:11:37

我还没有试过,但以下几点可能会奏效:

  1. 创建一个文档变量来保存全文,您可以在Merge主文档中使用DOCVARIABLE字段,而不是MERGEFIELD字段
  2. 在MailMergeBeforeRecordMerge事件中,您 a.将MERGEFIELD字段临时插入允许您轻松提取其结果的位置(例如,在文档开头) b.如有必要,更新字段(例如,Doc.Fields(1).Update) c.检索文本(Doc.Fields(1).Result.Text ) 删除插入的字段。根据需要操作文本 f.将结果放入文档变量 如果有必要,更新DOCVARIABLE字段。

请注意--我不记得细节,但有些版本的Word不能很好地处理DOCVARIABLE字段中的一些字符,特别是如果它们在表中。

否则,我认为您必须尝试打开到该文件的另一个连接(例如,可以使用ADO和Jet/ACE provider+Text文件IISAM进行连接),这可能会使提取文本变得更容易,但您必须有一种机制(例如一个唯一的键)来通过ADO检索正确的记录,就像当前在MailMerge中选择的那样。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13606840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档