【发布时间】:2019-09-16 01:15:17
【问题描述】:
如果 Excel 有 UDF,我如何从 Access 中获取查询结果?
我收到以下错误:“运行时错误'3085':表达式中未定义函数'XXXX'”。从 Excel VBA 打开(访问查询)记录集时发生错误。正在打开的查询具有触发错误的用户定义函数 (UDF)。
代码在 Excel Office 365 中。查询在 Access Office 365 中。
我已经成功地使用了被调用的查询(以及其他使用 UDF 的查询)大约十二个月,并且“突然”它不再工作了。我用谷歌搜索并测试了许多选项,但都没有成功。
大多数线程说它无法完成,或者不使用 udf 而是尝试使用有效的内置函数。我正在挑战这些回应,因为它以前曾奏效过。我使用的主要 udf 是一个名为“iMax”的 udf,它在其他帖子中有所介绍。它的功能类似于 Excel 中的 max()。 (No max(x,y) function in Access)
我还看到了建议分两步执行此操作的线程: 1 - 将查询更改为生成表查询。 2 - 将表格结果拉入 Excel。虽然我可能会侥幸逃脱(经过多次返工),但它会导致我制作许多包含成千上万行的临时表,而且看起来不太流畅。
我已经编译了 vba 并压缩了数据库,对我的问题没有影响。
作为一个长镜头,我创建了一个虚拟数据库,其中包含一个返回数字 1 的简单 udf 公共函数、一个返回三个记录的简单查询和一个用于函数结果的字段。拉入 Excel 时也会出现同样的错误。
Sub RunQuery()
Dim MyDatabase As dao.Database
Dim qdf As dao.QueryDef
Dim rs As dao.Recordset
Dim qryname As object
Dim SheetName As String
Set MyDatabase = DBEngine.OpenDatabase _
("SomePath\SomeFilename.accdb")
For Each qryname In Range("SomeRange")
Set rs = MyDatabase.OpenRecordset(qryname) '<<<ERROR IS HERE
SheetName = "SomeSheetName"
With Sheets(SheetName)
.ListObjects(SomeTableName).DataBodyRange.Rows.ClearContents
.Range("A2").CopyFromRecordset rs
End With
Set rs = Nothing
Set qdf = Nothing
Next qryname
End Sub
对于 For 循环中没有 udf 的所有查询,会将结果提取并转储到 Excel 中的一系列表中。任何在“Set rs = Mydatabase.OpenRecordset(qryname)
处出现 udf 错误的查询【问题讨论】:
标签: excel ms-access vba user-defined-functions