2013-05-29 75 views
0

首先在这里是我的代码。表选择错误与邮件合并从Excel到Word

Sub RunMerge() 
' Word constants 

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 & "\AAFCAAC-#4077508-v1-AAFC-FFPB-COPE-SATD-_AgriInnovation_Draft_Survey_Instructions_189318.doc") 

strWorkbookName = ThisWorkbook.Path & "\" & "MD.xlsm" 

wdocSource.MailMerge.MainDocumentType = wdFormLetters 

wdocSource.MailMerge.OpenDataSource _ 
     Name:=strWorkbookName, _ 
     AddToRecentFiles:=False, _ 
     Revert:=False, _ 
     Format:=wdOpenFormatAuto, _ 
     Connection:="Data Source=" & strWorkbookName, _ 
     SQLStatement:="SELECT * FROM 'Mail Merge Data$'" 

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

wd.Visible = True 
wdocSource.Close SaveChanges:=False 

Set wdocSource = Nothing 
Set wd = Nothing 

End Sub 

我想要从excel到Word的邮件合并。我的问题(我相信)是用SQLStatement:=“SELECT * FROM'邮件合并数据$'”当我运行我的代码时,excel进入了等待单词的等待状态。当我进入我的任务管理器时,我发现单词在选择一张桌子时停滞不前。表选择菜单中没有选项,指定的工作簿只是我的工作簿的路径,并在末尾附加了.xls。如果我删除了SQLStatement行,则会发生同样的情况,但是选择表在工作簿中填充了工作表和名称范围。我希望这是一个小错误或我的错字。

+0

只给多一点信息。如果我删除SQLStatement行并转到我的任务管理器以选择“表格选择”过程(只能使用任务管理器选择它)并选择正确的工作表,那么程序的其余部分将顺利运行。 – Tolure

回答

3

我认为问题在于您删除了您的情况中所需的其他引号。你的SQL语句,而应该是这样的:

SQLStatement:="SELECT * FROM `'Mail Merge Data$'`" 

你也可以使用此代码尝试:

SQLStatement:="SELECT * FROM [Mail Merge Data$]" 
+0

非常感谢。我用你的第二行代码。 – Tolure