2015-10-12 90 views
0

我试图完成我的宏,但我不知道如何从我准备好的Excel表(我的表中的每一行= signle文档)进行邮件合并。我写了这个宏,但它没有运行。第二件事是最后的文件必须是PDF格式,我不知道要调整它。使用宏VBA创建单独的pdf从excel表中创建个人pdf

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

如何在不运行它?它失败了吗?如果是这样,在哪里?你使用的是什么版本的Word和Excel? – DanL

+0

它运行,但我需要设置一个发生。这个宏只创建一个文档,我需要每行的一个文档。其次,它将文档保存为word .doc文件而不是pdf。我正在使用excel 2010 – Jean

+0

由于您将文件名设置为“.docx”,因此宏创建word文档 - 应使用适当的文件扩展名。另外 - 如果你想为每一行创建一个文档,那么你将不得不遍历行并调用每行的makro。 – therak

回答

0

你在你的代码,它应该用单节可以产生一个新的Word文档有MailMerge.Execute(可以是一个或多个页面),数据库中的每个记录。这就是Word如何设计来完成邮件合并 - 没有内置的功能来创建单独的文档。

如果您需要这样做,那么您需要不使用邮件合并(还有其他技术可以为一组数据创建单个文档),或者需要分解生成的文档。在过去的二十年里,这已经被讨论了很多次,并且有很多种方法可以解决这个问题。一是这里所描述和使用Word的子文档功能: http://homepage.swissonline.ch/cindymeister/MergFram.htm

另一种方法是这里介绍: http://www.gmayor.com/individual_merge_letters.htm