Access出错:“表达式中 'NZ' 函数未定义” 或VBA中其它函数未定义的解决办法大全

2022-04-06 00:00:00 函数 引用 自定义 表达式 未定义

Access出错:“表达式中 'NZ' 函数未定义”的解决办法 (很多Excel VBA出现 Left Right Mid Len等VBA函数未定义,或函数找不到也是类似的解决办法)

微软Access数据库也可以使用VBA编程及窗体 报表 等搭建一个中小型的管理系统,但有时程序部署到其它电脑会出现 表达式中 'NZ' 函数未定义 或 函数 Left Right Mid Len 等函数未定义的错误

这种问题一般可能是Access数据库mdb或accdb中引用的第三方库 系统Dll 或第三方Activex Ocx控件引用丢失引起的。也有可能是Access的环境出现了损坏或系统文件丢失引起的。

解决办法如下:

一、先检查Access数据库的引用有否丢失。

打开Access数据库文件,按Alt+F11打开VBE编辑窗口,单击工具 -引用,弹出引用窗口

检查有否丢失的引用,解决引用丢失的问题后,一般函数未定的的问题就能得到解决

二、引用的Dll或OCX是否未正常注册

如果引用的文件是存在的,但可能未正确注册,可以使用手工的方式进行注册

32位系统一般是在System32目录下 Regsvr32 Dll或ocx文件

64位系统一般是在Syswow64目录下 Regsvr32 Dll或ocx文件


三、可能是安装了其它程序导致VBA或Access相关系统文件被破坏或注册表错乱

这种情况 可以重装一次Access Access Runtime 或整个Office

如重装一下Office,先卸载后,然后在自定义安装中,选择自定义安装(选择所需的OFFICE程序)


将Access中所有选项全选上,Access的安装方式也选择本地运行全部程序

重装之后,一般上述问题均可得到解决。

四、ADO或DAO丢失或正常注册导致上述错误

一般早期Access数据库默认的是Ado 2.1 ,但新的windows自带的Ado 可能是更新的2.6 2.8 等,可以在引用中尝试选择新的版本。

另早期的Access数据库使用的是dao3.6 , 可以手工找到Dao360.dll 并注册之

五、另Access内置函数 VBA内置函数 不能在ADO ODBC中使用

Access 查询中 jet sql 语句时使用的很多函数是Access自带的函数,只允许使用在Access环境下,如Nz函数就是Access内置的函数,这些函数是不能使用在Ado 或 ODBC 或 Sql server 的sql语句中的。只能在Access的查询分析器内部使用(Jet Sql) 或 DAO 中使用。


六、Access VBA代码中编写的自定义函数必须由ACCESS环境支持,在其他环境中根本不能使用。

Access VBA代码中编写的自定义函数必须由ACCESS环境,如查询设计器,或DAO中使用,而在链接Sql server的链接表 或存储过程 中却不能使用这些Access中的自定义函数的,另许多在VB代码中可以运行的函数并不一定都能嵌入到jet sql语句中。

如Sql server中 或 Excel VBA中就没有 Nz 此函数,在VBA中就要使用 IIF(A is null ,0, A) 来替代 ,在Sql server中就要使用 IsNull 或别的函数来替代。


七、使用Access Runtime 在表达式中访问 2007 未定义函数“nz”

我有一个使用多年的 Access 2007 应用程序。2007 mde 前端和 mdb 后端,都在同一台 PC 上。我使用 Sagekey 安装程序。在过去的一年中,用户开始收到错误“表达式中的未定义函数'nz'”。当您启动我的应用程序并单击几个按钮时,一切都很好。然后单击一个按钮和“表达式中的未定义函数'nz'”消息,而不是打开它应该打开的屏幕。您必须退出该应用程序并重新启动它。通常第二次启动时一切正常。退出并重新启动,您会再次收到错误消息。所以是随机的。它发生在 Windows 7 和 10 以及许多 PC 上。我的应用程序是用带有 dao 记录集的 VBA 编写的。我到处都使用了 Nz 功能。从来没有遇到过问题。当然,代码是合理的,因为它已经完美地工作了很多年。任何想法是什么原因造成的?或者我该如何解决?

已解决:当您从控制面板卸载我的应用程序时(再次使用 SageKey 精彩技术),它不会卸载 Access 2007 运行时。出现问题的是运行时。修复只是使用控制面板卸载运行时。然后重新安装我的应用程序(它安装了新的 Access 2007 运行时。) 这样就可解决nz未定义函数的问题

我也遇到同样的问题,我使用的也是sagekey公司的技术 (只是这家公司已不在了),后来也是在控制面板中卸掉掉access runtime, 再重新安装(使用我的sagekey安装程序 会自动再重新安装access runtime) , 就完美解决了。


通过以上7种方法一般均能解决错误。

来源 https://zhuanlan.zhihu.com/p/452405086

相关文章