Я только что прошел это. Вот что я делаю, и это хорошо работает. oDocument - это форма слияния, которую пользователь выбирает через открытое диалоговое окно. Файл Excel - это запрос, который я ранее экспортировал и поместил во временную папку пользователя. Я попробовал эту технику с запросами Access и временными таблицами, но обнаружил, что использование Excel было намного более простым.
Команда Sleep взята из импортированной системной функции dll (Public Declare Sub Sleep Lib "kernel32" (ByVal dwMS As Long)) и дает Word время для запуска слияния. На самом деле, это может быть все, что вам нужно. Это использует Office 2007.
If Not oDocument Is Nothing Then
' get merge source file
Set oFSO = New FileSystemObject
Set oFolder = oFSO.GetSpecialFolder(TemporaryFolder)
strTempFile = oFolder.Path & "\PTDMergeSource.xls"
' run merge
With oDocument.MailMerge
.MainDocumentType = wdFormLetters
.Destination = wdSendToNewDocument
.OpenDataSource strTempFile, WdOpenFormat.wdOpenFormatDocument, False, False, False, False, , , , , , , "SELECT * FROM `tblMerge$`", , False, WdMergeSubType.wdMergeSubTypeAccess
.Execute True
End With
Sleep 2
oDocument.Close False
Else
MsgBox "Action was cancelled, or there was an error opening that document. Please try again, then try opening that document in Word. It may be someone else has locked that document (they are editing it). If the problem persists, email the document to the support contractor."
End If