2013-05-29 5 views
0

Прежде всего, это мой код.Таблица Выберите ошибку при слиянии с Excel на слово

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 к слову. Моя проблема (я считаю) с SQLStatement: = «SELECT * FROM» Mail Merge Data $ », поскольку, когда я запускаю свой код, excel переходит в неопределенность, ожидая слова. Когда я вхожу в свой диспетчер задач, я вижу, что слово зацикливается на выборе таблицы. В меню выбора таблицы нет параметров, и указанная книга - это только путь к моей книге с добавлением .xls до конца. Если я удалю строку SQLStatement, произойдет то же самое, но таблица select заполняется листами и диапазонами имен в моей книге. Я надеюсь, что это небольшая ошибка или опечатка с моей стороны.

+0

Просто чтобы дать немного больше информации. Если я удалю строку SQLStatement и перейду в мой диспетчер задач, чтобы выбрать процесс «выбор таблицы» (его можно выбрать только с помощью диспетчера задач) и выбрать правильный лист, тогда остальная часть программы будет выполняться плавно. – Tolure

ответ

3

Я думаю, проблема в том, что вы удалили дополнительные кавычки, которые требуются в вашей ситуации. Ваш SQL оператор должен скорее выглядит следующим образом:

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

Вы также можете попробовать с этим кодом:

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

Большое вам спасибо. Я использовал вторую строку кода. – Tolure