我们正在尝试从 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 被传入并包含有效的功能性内容。
它成功打开单词,使其可见并打开要合并的模板。但是,此时它会要求确认数据源,并显示可能的数据源列表。单击“全部显示”复选框后,我可以通过 ODBC(.mdb、.accdb)向下滚动到 MS Access 数据库并从列表中选择它。
然后它显示一个标题为“ODBC Microsoft Access 驱动程序登录失败”的框,显示“找不到文件:“[数据库文件夹的路径]/[包含文件夹的名称].mdb”
因此,如果我的数据库位于 C:\Temp 中,则错误路径将显示为“C:\Temp.mdb”。将 access 数据库移动到另一个文件夹会导致错误路径更新,以根据包含的文件夹查找相应命名的 mdb 文件。
我不知道它是否相关,但它似乎也在以编辑模板本身的模式打开模板,而不是从该模板生成新文档。
我在这里遗漏了什么还是有人有任何想法?
干杯
在下面 Remou 的帮助下,我们放弃了直接链接到 Access 并使用 Remou 建议的链接中的代码输出到一个临时文本文件,然后从那里合并。
我们修改了代码以删除 CurrentBackendPath() 并更改了对该函数的唯一引用,如下所示:
Private Function GetStartDirectory() As String
'GetStartDirectory = CurrentBackendPath() & "mm\"
GetStartDirectory = CurrentProject.Path & "\mm\"
End Function
我们使用的唯一其他修改是将代码更改为特定于我们的目的。再次感谢大家的回复。如果我有足够的声誉,我会支持 Remou 的回应!