You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access VBA触发Word邮件合并时数据源访问错误的解决求助

解决Access VBA触发Word邮件合并时“无法访问数据源”的问题

根据你描述的场景,手动操作正常但VBA触发报错,核心问题出在OpenDataSource的参数配置或数据源复用逻辑上,以下是几个经过验证的解决方案:


方案1:修正OpenDataSource参数冗余问题

你的代码中重复指定了Connection字符串,这可能导致Word无法正确解析数据源。简化参数,让Word自动适配驱动:

Private Sub btnCreateLV_Click()
On Error GoTo ErrorHandler

Dim wordApp As Object
Dim wordDoc As Object
Dim strSQL As String
Dim currentID As Long

currentID = Me!mob_ID.Value
strSQL = "SELECT * FROM qry_02_Mobility WHERE mob_ID = " & currentID

Set wordApp = CreateObject("Word.Application")
Set wordDoc = wordApp.Documents.Open(CurrentProject.Path & "\LV_Merge_01.docx") ' 动态路径更可靠

With wordDoc.MailMerge
    .OpenDataSource _
        Name:=CurrentProject.FullName, _
        LinkToSource:=True, _
        SQLStatement:=strSQL
    .Destination = 0 ' 对应wdSendToNewDocument常量,未引用Word库时用数值
    .Execute
End With

wordApp.Visible = True

Cleanup:
Set wordDoc = Nothing
Set wordApp = Nothing
Exit Sub

ErrorHandler:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "Mail Merge Failed"
Resume Cleanup
End Sub

方案2:复用模板已配置的数据源

既然模板本身能正常连接到qry_02_Mobility,直接修改数据源的查询条件即可,无需重新打开数据源,避免驱动兼容性问题:

Private Sub btnCreateLV_Click()
On Error GoTo ErrorHandler

Dim wordApp As Object
Dim wordDoc As Object
Dim currentID As Long

currentID = Me!mob_ID.Value

Set wordApp = CreateObject("Word.Application")
Set wordDoc = wordApp.Documents.Open(CurrentProject.Path & "\LV_Merge_01.docx")

With wordDoc.MailMerge
    ' 直接修改现有数据源的查询字符串
    .DataSource.QueryString = "SELECT * FROM qry_02_Mobility WHERE mob_ID = " & currentID
    .Destination = 0
    .Execute
End With

wordApp.Visible = True

Cleanup:
Set wordDoc = Nothing
Set wordApp = Nothing
Exit Sub

ErrorHandler:
MsgBox "Error " & Err.Number & ": " & Err.Description, vbCritical, "Mail Merge Failed"
Resume Cleanup
End Sub

方案3:排查环境与权限问题

  • Office位数一致性:确保Access和Word同为32位或64位,混合位数会导致OLEDB驱动调用失败。
  • 文件权限:确认数据库和模板所在文件夹没有读写限制(比如不要放在Program Files等受保护目录)。
  • 动态路径:避免硬编码路径,用CurrentProject.Path生成模板路径,防止路径变动导致找不到文件。

方案4:拆分SQL语句参数

如果直接传递完整SQL仍报错,尝试将SQL拆分为SQLStatement1和SQLStatement2,这是Word邮件合并的标准用法:

With wordDoc.MailMerge
    .OpenDataSource _
        Name:=CurrentProject.FullName, _
        SQLStatement1:="SELECT * FROM qry_02_Mobility", _
        SQLStatement2:="WHERE mob_ID = " & currentID
    .Destination = 0
    .Execute
End With

内容的提问来源于stack exchange,提问作者Christian Geiselmann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 00:42:37