2015-10-12 1 views
0

J'essaie de compléter ma macro mais je ne sais pas comment procéder à la fusion et publipostage à partir de ma table excel préparée (chaque ligne de mon document table = signle). J'ai écrit cette macro mais elle ne fonctionne pas. Et la deuxième chose est que le document final doit être en pdf et je ne sais pas pour l'ajuster.Création de pdf individuel à partir de la table excel en utilisant la macro VBA

Sub RunMerge() 

    Dim wd As Object 
    Dim wdocSource As Object 

    Dim strWorkbookName As String 

    On Error Resume Next 
    Set wd = GetObject(, "Word.Application") 
    If wd Is Nothing Then 
     Set wd = CreateObject("Word.Application") 
    End If 
    On Error GoTo 0 

    Set wdocSource = wd.Documents.Open(ThisWorkbook.Path & "\" & "ArtSpecDatabase.docx") 

    strWorkbookName = ThisWorkbook.Path & "\" & ThisWorkbook.Name 

    wdocSource.MailMerge.MainDocumentType = wdFormLetters 

    wdocSource.MailMerge.OpenDataSource _ 
      Name:=strWorkbookName, _ 
      AddToRecentFiles:=False, _ 
      Revert:=False, _ 
      Connection:="Data Source=" & strWorkbookName & ";Mode=Read", _ 
      SQLStatement:="SELECT * FROM `Sheet2$`" 

    With wdocSource.MailMerge 
     .Destination = wdSendToNewDocument 
     .SuppressBlankLines = True 
     With .DataSource 
      .FirstRecord = wdDefaultFirstRecord 
      .LastRecord = wdDefaultLastRecord 
     End With 
     .Execute Pause:=False 
    End With 

Dim PathToSave As String 
PathToSave = ThisWorkbook.Path & "\" & "docs" & "\" & Sheets("Sheet2").Range("B2").Value2 & ".docx" 
'PathToSave = "C:\Users\admin\Desktop\New folder (2)\docs\Merge_Mail_" & Replace(Replace(Now(), "/", "-"), ":", ".") & ".docx" 
If Dir(PathToSave, 0) <> vbNullString Then 
    wd.FileDialog(FileDialogType:=msoFileDialogSaveAs).Show 
Else 
    wd.ActiveDocument.SaveAs2 PathToSave, wdFormatDocumentDefault 
End If 

    wdocSource.Close SaveChanges:=False 

    Set wdocSource = Nothing 
    Set wd = Nothing 

End Sub 
+0

Comment ne pas courir? Est-ce qu'il échoue? Si oui, où? Quelle version de Word et Excel utilisez-vous? – DanL

+0

Il fonctionne, mais je dois définir une occurance. Cette macro crée un seul document et j'ai besoin d'un document de chaque ligne. Et deuxième chose, il enregistre les documents que les fichiers word .doc pas pdf. J'utilise Excel 2010 – Jean

+0

La macro crée des documents Word parce que vous définissez le nom de fichier en tant que ".docx" - devrait utiliser l'extension de fichier appropriée. De plus, si vous voulez créer un document pour chaque ligne, vous devrez parcourir les lignes et appeler le makro pour chaque ligne. – therak

Répondre

0

Vous avez MailMerge.Execute dans votre code, qui devrait produire un nouveau document Word avec une seule section (peut être une ou plusieurs pages) pour chaque enregistrement dans la base de données. C'est ainsi que Word est conçu pour faire du publipostage - il n'y a pas de fonctionnalité intégrée pour créer des documents séparés.

Si vous en avez besoin, vous n'avez PAS besoin d'utiliser la fusion et publipostage (il existe d'autres techniques pour créer des documents individuels pour un ensemble de données) ou vous devez diviser le document résultant. Cela a été discuté à plusieurs reprises au cours des vingt dernières années et il existe plusieurs façons de s'y prendre. On est décrit ici et utilise la fonction de sous-document Word: http://homepage.swissonline.ch/cindymeister/MergFram.htm

Une autre approche est présentée ici: http://www.gmayor.com/individual_merge_letters.htm