使用UDF的查询在Access中工作,但在Excel中的expression式(Err 3085)中给出未定义的函数

我有一个date/时间字段的Access表。 我想从date/时间字段和其他3个文本字段中以与另一个数据库中的匹配关键字字段相同的格式创build复合关键字字段。

所以我连接了3个文本字段并在模块中写了一个用户定义的函数来输出date字段作为格式为“YYYYMMDD”的string。

Public Function YYYYMMDD(dteDate As Date) As String YYYYMMDD = Format(dteDate, "YYYYMMDD") End Function 

然后,我可以在Access中成功运行我的查询,它一切正常。

但是,当我在Excel中设置一些DAO代码,并尝试运行在Access中正常工作的查询…

 db.Execute "qryMake_tblValsDailyAccount" 

… Excel给我“expression式中未定义的函数(错误3085)”错误。

对我来说,这是Excel和/或Access中的一个错误,因为(Excel)客户端应该不需要知道关于通常在(Access)服务器中完全发生的内部计算的任何事情。

Excel应该将querydef(不带参数的名称)发送到服务器,让服务器完成工作,然后收到答案。 为什么需要涉及服务器内部的function?

有没有人知道这个方法?

Access使用Jet,Access和Jet的组合理解VBAfunction。 DAO是不了解VBAfunction的通用数据访问层。

当您使用DAO时,您不会自动化Access,只是使用该桥来获取数据。

即使某些版本的Access使用DAO内部与Jet通信,了解VBA的function也被编程到Access中,而不是DAO。

我认为你的解决方法是你可以做的最好的。

好吧,我已经修复了这个问题,用一个通过主键ValsDaily_ID连接到原始数据表的查询replaceVBA函数

 SELECT tblValsDaily.ValsDaily_ID, Format(Year(tblValsDaily.BusinessDate))+ Format(Month(tblValsDaily.BusinessDate),"00")+ Format(Day(tblValsDaily.BusinessDate),"00") AS YYYYMMDD FROM tblValsDaily; 

但这真的是蹩脚的,我仍然不知道为什么VBA版本不工作…