2016-06-09 3 views
0

J'ai un AddIn VB.NET VSTO pour Word.Word MailMerge partielle plage

Dans ce projet, j'ai besoin d'exécuter une opération MailMerge, mais seulement pour une plage partielle de MergeSource.

Dans cet exemple, supposons que MergeSource contient 100 destinataires. Je souhaite uniquement inclure le destinataire 11-20.

Normalement, je fais ce qui suit, mais cela inclut TOUS les destinataires.

Sub ExecuteMerge(ByRef Doc As Word.Document) 
    Doc.MailMerge.Execute(False) 
End Sub 

Ce que je voudrais être en mesure de le faire, est quelque chose comme ceci:

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 

Note: .StartPosition et .EndPosition est juste pseudo-code, il n'existe pas comme une propriété.

Voici ce que je cherche. Comment définir la plage de destinataires à inclure dans la fusion?

Parole

doit être en mesure de le faire, car quand je joue MailMerge manuellement, je reçois cette boîte de dialogue: MailMerge dialog 11-20

Répondre

1

I figured it out, vous pouvez définir .FirstRecord et .LastRecord sur le DataSource.

comme ceci:

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