2014-02-10 2 views
0

У меня есть некоторый тип ошибки с моим кодом, но я не уверен, что. Этот код работал для меня менее месяца назад.Доступ к Word Mail Merge - проблема с последней частью

То, что я пытаюсь сделать: Выделите письмо слияния для каждого адреса в базе данных.

Результат моего кода: В зависимости от того, сколько адресов я проверяю, говоря, что это дает мне много точных копий шаблона, заполненных последними и последними записями базы данных.

Пример: Я проверяю 18 адресов в базе данных и передаю эту переменную в мою таблицу экспорта. Он выплескивает 18 файлов Microsoft 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 приведет к одной ActiveDocument, который содержит такое же количество форм букв (т.е. NROWS), поскольку есть записи в источнике данных , Затем ваш цикл «For x» делает копии nRows этого документа.

Не ясно, почему каждый документ содержит только первую и последнюю записи из ваших данных. Однако, если основной документ слияния содержит любые поля {NEXT} или {NEXTIF}, каждая буква может потреблять более одной записи из источника данных (тогда как цикл «For x» все равно будет создавать копии nRows).

В качестве начального этапа отладки я бы вырезал цикл For и посмотрел, что создала mrege. Если бы я все еще был озадачен, я бы, вероятно, создал простое «письмо формы», содержащее ничего, кроме полей в источнике данных, и вместо этого объединить это.

Однако для этого вам нужно будет использовать другой подход - здесь есть несколько других вопросов, которые обсуждают вопрос о «расщеплении» выходного файла mailmerge или создании одного документа на запись источника данных. Осмотреться.

 Смежные вопросы

  • Нет связанных вопросов^_^