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

Word 2021 64位VBA数据库连接代码无法运行问题

enter image description here

故障原因

代码无法在64位Word 2021运行是两类问题共同导致的:

  • 代码本身存在多处变量/对象名不匹配、逻辑遗漏的错误,在32位Word 2013的宽松VBA容错规则下碰巧未触发报错,64位环境下容错规则收紧直接失效:
    • OdbcConnection函数的形参均为Ace前缀命名,函数内部却调用了不存在的Benz前缀变量
    • CloseDatabase过程中调用的Acedb对象和全局定义的Benzdb对象名不匹配
    • 自定义函数OdbcConnection最终没有把拼接好的连接字符串作为返回值赋值给函数名,32位环境下靠隐式公共变量传递碰巧能拿到值
  • 旧版DAO 3.6组件仅支持32位Office,64位Office不兼容该类库,无法直接识别Database、Workspaces等对象类型。

修复步骤

  1. 打开VBA编辑器(按Alt+F11调出),点击顶部菜单「工具」-「引用」,取消勾选旧版Microsoft DAO 3.6 Object Library,勾选版本号最高的Microsoft Office [版本号] Access Database Engine Object Library(Word 2021对应16.0版本)。
  2. 确认配置的ODBC数据源为64位版本:打开系统的「ODBC数据源管理器(64位)」,确认名称为Benz的DSN存在、连接参数配置正确,32位DSN无法被64位Office识别。
  3. 将原有代码替换为以下修正版本:
' 强制变量声明,从根源避免变量名拼写错误
Option Explicit

Public Benzdb As DAO.Database
Public sconnection As String

Sub ConnecttoDatabase()
    'Production System ODBC
    sconnection = OdbcConnection("dbBenz", "Benz", "username", "password")
    Set Benzdb = DBEngine.Workspaces(0).OpenDatabase("Benz", False, False, sconnection)
End Sub

Sub CloseDatabase()
    ' 增加对象存在性判断,避免无有效连接时触发报错
    If Not Benzdb Is Nothing Then
        Benzdb.Close
        Set Benzdb = Nothing
    End If
End Sub

Public Function OdbcConnection(ByVal AceDatabaseName As String, ByVal AceDataSourceName As String, ByVal Aceuserid As String, ByVal AcePassWord As String) As String
    ' 统一形参引用,修正返回值赋值逻辑
    OdbcConnection = "ODBC" _
        & ";DATABASE=" & AceDatabaseName _
        & ";UID=" & Aceuserid _
        & ";PWD=" & AcePassWord _
        & ";DSN=" & AceDataSourceName
End Function

额外说明

64位Office环境下VBA默认收紧了隐式变量声明的宽松规则,所有VBA项目建议默认在模块开头添加Option Explicit,可以第一时间发现变量名拼写错误,避免跨版本运行时出现无提示的逻辑故障。

内容的提问来源于stack exchange,提问作者S Mares

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:36:18