更新旧版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
相关产品推荐
相关产品推荐

