2016-06-09 26 views
0

Ich habe ein VB.NET VSTO AddIn für Word.Word MailMerge Teilbereich

In diesem Projekt muss ich eine MailMerge-Operation ausführen, aber nur für einen Teilbereich der MergeSource.

In diesem Beispiel nehmen wir an, dass die MergeSource 100 Empfänger enthält. Ich möchte nur Empfänger 11-20 aufnehmen.

Normalerweise mache ich folgendes, aber das schließt ALLE Empfänger ein.

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

Was würde ich zu tun, um die Lage sein mag, ist so etwas wie diese:

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 

Hinweis: .StartPosition und .EndPosition ist nur Pseudo-Code, ist es nicht als eine Eigenschaft existiert.

Das ist, was ich suche. Wie stelle ich den Bereich der Empfänger ein, die in die Zusammenführung einbezogen werden sollen?

Wort muss in der Lage sein, dies zu tun, denn wenn ich MailMerge manuell durchführen, ich diesen Dialog erhalten: MailMerge dialog 11-20

Antwort

1

ich es herausgefunden, Sie .FirstRecord und .LastRecord auf den DataSource einstellen.

Wie so:

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