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

更新旧版Access宏报用户定义类型未定义编译错误如何解决

宏替换DAO引用后触发编译错误问题

问题背景

更新原依赖Microsoft DAO 3.6 Object Library的旧版宏时,已将该引用替换为Microsoft Access 16.0 Object Library,但代码第一行弹出*Compile error: User-defined type not defined(编译错误:用户定义类型未定义)*报错,需要完成剩余配置实现库的正确引用。

报错代码

Dim dbExternal As DAO.Database
Dim rsTmp As DAO.Recordset
Dim qdfTmp As QueryDef


Dim oConn As ADODB.Connection
Dim rs As ADODB.Recordset
Dim Query As String

Set oConn = New ADODB.Connection
Set rs = New ADODB.Recordset

当前已加载引用

已加载引用列表截图

解决步骤

仅加载Microsoft Access 16.0 Object Library不会自动包含代码中用到的DAO、ADO两类类型定义,缺少两个必要引用才会触发报错,按以下操作修复:

  • 补充DAO类型库引用:打开VBA编辑器顶部菜单栏「工具-引用」窗口,勾选Microsoft Office 16.0 Access Database Engine Object Library。该库是旧版DAO 3.6的官方新版替代项,适配32/64位Office,不要继续勾选过时的DAO 3.6版本避免兼容问题。
  • 补充ADO类型库引用:在同一引用窗口勾选Microsoft ActiveX Data Objects 6.1 Library,如果系统中无该版本,选择版本号最高的6.x系列即可,最低兼容版本为2.8。

两个引用勾选完成后点击「确定」保存设置,重新编译工程即可消除报错。

可选兼容优化:如果需要在不同版本Office环境下分发宏,可将ADO相关声明改为晚绑定写法,无需提前手动引用ADO库即可运行,示例:

' ADO晚绑定写法,无需提前配置引用
Dim oConn As Object, rs As Object
Set oConn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

DAO部分不建议使用晚绑定,会丢失VBA智能代码提示,且Access Database Engine库跨版本兼容性较强,直接固定引用即可。

内容的提问来源于stack exchange,提问作者Brad Lee

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:42:28