2014-02-10 37 views
0

我的代碼有一些類型的錯誤,但我不知道是什麼。這個代碼在不到一個月前爲我工作。訪問Word郵件合併 - 與最後部分的問題

我在做什麼:讓它爲數據庫中的每個地址吐出一封郵件合併信。

我的代碼的結果:取決於我檢查的地址數量,告訴它給出了填充了數據庫的FIRST和LAST條目的模板的許多精確副本。

例如:我檢查數據庫中的18個地址,並將該變量傳遞到我的導出表中。它會吐出18個Microsoft Word文件,每個Word文件都有一個填充模板的副本,第1頁填寫的第一個地址和第2頁填寫的最後一個地址。

我在做什麼錯?

Private Sub MailMerge(ClientTemplate As String) 
Dim Word As Object 
Dim Doc As Object 
Dim Sel As Object 
Dim nRows As Integer 


Set Word = CreateObject("Word.Application") 
Set Doc = Word.Documents.Open(ClientTemplate) 
Set Sel = Word.Selection 
nRows = DCount("*", "tblFinalMailMerge") 


With Word 
    .Visible = True 
    .Application.Activate 
    '.Documents.Open (ClientTemplate) 
End With 

With Doc.MailMerge 
    .MainDocumentType = wdFormLetters 
    .Destination = wdSendToNewDocument 
    .OpenDataSource Name:=CurrentDb.Name, SQLStatement:="SELECT * FROM [tblFinalMailMerge]" 
    With .DataSource 
     .FirstRecord = wdDefaultFirstRecord 
     .LastRecord = wdDefaultLastRecord 
    End With 


    .Execute Pause:=False 
End With 

For x = 1 To nRows 

    With Doc.MailMerge.DataSource 
     .ActiveRecord = x 
     If ActiveRecord > .LastRecord Then Exit For 
    End With 
     Word.ActiveDocument.SaveAs _ 
     FileName:="C:\temp\test" & x & ".docx" 

Next x 
+0

有人嗎?這個真的讓我感到很沮喪 - 它有wdSendToNewDocument,我不明白爲什麼它會在一個文檔中創建2個模板(第一個和最後一個)。 – user2296381

回答

0

的出發點在這裏是合併套用信函到一個新的文檔時,.Execute將導致包含相同數量的套用信函(即NROWS)因爲有您的數據源中的記錄單的ActiveDocument 。您的「For x」循環會生成該文檔的nRows副本。

不太清楚的是爲什麼每個文檔只包含數據中的第一個和最後一個記錄。但是,如果您的郵件合併主文檔包含任何{NEXT}或{NEXTIF}字段,則每個字母可能會從數據源中使用多條記錄(而「For x」循環仍會創建nRows副本)。

作爲最初的調試步驟,我將切出For循環並查看mrege生成的內容。如果我仍然很迷惑,我可能會創建一個簡單的「表單字母」,只包含數據源中的字段,然後合併它。

但是,要做到這一點,您需要使用另一種方法 - 這裏討論「拆分」一個郵件合併輸出文件或每個數據源記錄生成一個文檔的問題。到處看看吧。