Word MailMerge部分范围

时间:2016-06-09 10:25:41

标签: vb.net ms-word vsto mailmerge

我有一个VB.NET VSTO AddIn for Word。

在这个项目中,我需要执行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时,我会看到此对话框: MailMerge dialog 11-20

1 个答案:

答案 0 :(得分:1)

我弄明白了,您可以在.FirstRecord上设置.LastRecordDataSource

像这样:

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 Sub