我们正在尝试从 Access 中自动执行邮件合并过程 - 单击按钮后,VBA 将运行指定当前数据库(accdb)作为数据源并运行 SQL,具体代码如下:
'Set up Word
Dim objWord As Object
Set objWord = CreateObject("Word.Application")
'Make visible, open specified doc to merge
With objWord
.Visible = True
.Documents.Open strDocName
End With
'Set the data source path
Dim docPath As String
docPath = CurrentProject.Path & "\" & CurrentProject.Name
'Open the merge data source - simplified
objWord.activedocument.mailmerge.opendatasource _
Name:=docPath, _
SQLStatement:=strSQL
strDocName 和 strSQL 被传入并包含有效的功能内容。
它成功打开了Word,使其可见并打开了要合并到的模板。然而,此时,它会要求确认数据源,并显示可能的数据源列表。单击“显示全部”复选框后,我可以通过 ODBC(.mdb、.accdb)向下滚动到 MS Access 数据库,然后从列表中选择它。
然后,它会显示一个标题为“ODBC Microsoft Access 驱动程序登录失败”的框,显示“无法找到文件:“[数据库文件夹的路径]/[包含文件夹的名称].mdb””
因此,如果我的数据库位于 C:\Temp 中,错误路径将显示为“C:\Temp.mdb”。将 Access 数据库移动到另一个文件夹会导致错误路径更新,以根据包含的文件夹查找相应命名的 mdb 文件。
我不知道它是否相关,但它似乎也在编辑模板本身的模式下打开模板,而不是从该模板生成新文档。
我在这里遗漏了一些东西还是有人有任何想法?
Cheers
在下面 Remou 的帮助下,我们放弃了直接链接到 Access,并使用 Remou 建议链接中的代码输出到临时文本文件,然后从那里合并。
我们修改了代码以删除 CurrentBackendPath() 并更改对此函数的唯一引用,如下所示:
Private Function GetStartDirectory() As String
'GetStartDirectory = CurrentBackendPath() & "mm\"
GetStartDirectory = CurrentProject.Path & "\mm\"
End Function
我们使用的唯一其他修改是将代码更改为特定于我们的目的。再次感谢大家的回复。如果我有足够的声誉的话,我会为 Remou 的回应投票!