求教,为什么我在 ACCESS 中使用自定义函数会提示“表达式中函数未定义”呢?

2016-10-14 14:29:09 +08:00
 KagamineLenKai2

我这里有一个报表需求,需要用 access 算出中位数,不过 access 并没有原生提供 median 函数,所以我就找了一个用 VB 实现的自定义函数,出处是这里
Stack Overflow

Function fMedian(SQLOrTable, GroupFieldName, GroupFieldValue, MedianFieldName)
Dim rs As DAO.Recordset

Set db = CurrentDb
Set rs1 = db.OpenRecordset(SQLOrTable, dbOpenDynaset)

If IsDate(GroupFieldValue) Then
    GroupFieldValue = "#" & GroupFieldValue & "#"
ElseIf Not IsNumeric(GroupFieldValue) Then
    GroupFieldValue = "'" & Replace(GroupFieldValue, "'", "''") & "'"
End If

rs1.Filter = GroupFieldName & "=" & GroupFieldValue
rs1.Sort = MedianFieldName

Set rs = rs1.OpenRecordset()
rs.Move (rs.RecordCount / 2)
rs.MovePrevious

If rs.RecordCount Mod 2 = 0 Then
    varMedian1 = rs.Fields(MedianFieldName)
    rs.MoveNext
    fMedian = (varMedian1 + rs.Fields(MedianFieldName)) / 2
Else
    fMedian = rs.Fields(MedianFieldName)
End If

End Function

原表的字段如下
|结束时间年月日 |分公司 |计算时长之 First 之合计|状态 1|状态 2|日期|月份|集合|
集合=分公司&状态 1&状态 2&月份,是一个辅助列
想输出的表是这样的
|集合|时效(计算时长之 First 之合计的中位数)|
表达式如下

时效: fMedian("5-8-1 新增放款时效(按分公司)","集合",[集合],"计算时长之 First 之合计")

在 SQL 视图里看的话是这样

SELECT [5-8-1 新增放款各环节时效基础表].集合月,
fMedian("5-8-1 新增放款时效(按分公司)","集合",[集合],"计算时长之 First 之合计") AS 时效
FROM [5-8-1 新增放款各环节时效基础表]
GROUP BY [5-8-1 新增放款各环节时效基础表].集合;

但是每次运行查询的时候 access 都会提示“表达式中'fMedian'函数未定义”,试了好多次也不知道问题在哪里,求指教 /(ㄒoㄒ)/~~

8923 次点击
所在节点    问与答
2 条回复
KagamineLenKai2
2016-10-14 14:49:19 +08:00
刚开了下 VBA 里的引用, Microsoft DAO 3.6 Object Library 没有勾选…但是勾上再点确定又会提示加载 DLL 错误……
KagamineLenKai2
2016-10-14 15:21:21 +08:00
又搜索了一下,貌似是说 Microsoft Access 16.0 Object Library 就能支持 DAO 运行,而这个 DAO3.6 好多年前就不更新了,新版 office 也不再支持了……

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312782

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX