V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
KagamineLenKai2
V2EX  ›  问与答

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

  •  
  •   KagamineLenKai2 · 2016-10-14 14:29:09 +08:00 · 8782 次点击
    这是一个创建于 2749 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我这里有一个报表需求,需要用 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ㄒ)/~~

    2 条回复    2016-10-14 15:21:21 +08:00
    KagamineLenKai2
        1
    KagamineLenKai2  
    OP
       2016-10-14 14:49:19 +08:00
    刚开了下 VBA 里的引用, Microsoft DAO 3.6 Object Library 没有勾选…但是勾上再点确定又会提示加载 DLL 错误……
    KagamineLenKai2
        2
    KagamineLenKai2  
    OP
       2016-10-14 15:21:21 +08:00
    又搜索了一下,貌似是说 Microsoft Access 16.0 Object Library 就能支持 DAO 运行,而这个 DAO3.6 好多年前就不更新了,新版 office 也不再支持了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1832 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 16:30 · PVG 00:30 · LAX 09:30 · JFK 12:30
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.