我有一个用于Word的VB.NET VSTO AddIn。
在这个项目中,我需要执行一个MailMerge操作,但只针对MergeSource的一部分范围。
在本例中,让我们假设MergeSource包含100个收件人。我想只包括收件人11-20。
通常我会执行以下操作,但这包括所有收件人。
Sub ExecuteMerge(ByRef Doc As Word.Document)
Doc.MailMerge.Execute(False)
End Sub我希望能做的事情是这样的:
Sub ExecuteMerge(ByRef Doc As Word.Document, Optional StartPos As Integer = 0, Optional EndPos As Integer = 0)
If StartPos > 0 AndAlso StartPos <= Doc.MailMerge.DataSource.RecordCount Then
Doc.MailMerge.StartPosition = StartPos
Else
Doc.MailMerge.StartPosition = 1
End If
If EndPos > StartPos AndAlso EndPos <= Doc.MailMerge.DataSource.RecordCount Then
Doc.MailMerge.EndPosition = EndPos
Else
Doc.MailMerge.EndPosition = Doc.MailMerge.DataSource.RecordCount
End If
Doc.MailMerge.Execute(False)
End Sub注意:.StartPosition和.EndPosition只是伪代码,并不是作为属性存在的。
这就是我要找的。如何设置合并中包含的收件人范围?
Word必须能够做到这一点,因为当我手动执行MailMerge时,我会看到以下对话框:

发布于 2016-06-09 19:14:00
我想出来了,你可以在DataSource上设置.FirstRecord和.LastRecord。
如下所示:
Sub ExecuteWordMailMerge(ByRef Doc As Word.Document, Optional StartPos As Integer = 0, Optional EndPos As Integer = 0)
If StartPos > 0 AndAlso StartPos <= Doc.MailMerge.DataSource.RecordCount Then
Doc.MailMerge.DataSource.FirstRecord = StartPos
Else
Doc.MailMerge.DataSource.FirstRecord = 1
End If
If EndPos > StartPos AndAlso EndPos <= Doc.MailMerge.DataSource.RecordCount Then
Doc.MailMerge.DataSource.LastRecord = EndPos
Else
Doc.MailMerge.DataSource.LastRecord = Doc.MailMerge.DataSource.RecordCount
End If
Doc.MailMerge.Execute(False)
End Subhttps://stackoverflow.com/questions/37723335
复制相似问题