Office中国论坛/Access中国论坛

标题: 为什么总是说未定义函数 [打印本页]

作者: wuwt918    时间: 2012-2-8 11:37
标题: 为什么总是说未定义函数
代码:
Public Function datedistance(a, b)
Dim a, b As Date
If b < a Then
msg "后面日期小于前面日期,请检查取值是否正确"
Else
If Year(a) = Year(b) Then
  If Month(a) = Month(b) Then
    datedistance = Day(b) - Day(a) + 1
    Else
    datedistance = Day(b)
  End If
  Else
datedistance = Day(b)
End If
End If

End Function
-------------------------------------------
Private Sub Command7_Click()
Dim strsql1, strsql2, strsql3, strsql4, strsql5 As String

strsql1 = "UPDATE 宿舍管理 SET 宿舍管理.会计期间 = [Text3]"
strsql2 = "UPDATE 宿舍管理 SET 宿舍管理.应承担天数 = datedistance(宿舍管理.入住日期,宿舍管理.搬离日期)"

doCmd.RunSQL strsql2
End Sub

我觉得第一行已经定义了datedistance这个函数,怎么后面用不了啊
作者: fnsmydyang    时间: 2012-2-8 11:54
发个实例看看能否解决。(在论坛上求解决问题上传附件是最好的方法)
作者: Grant    时间: 2012-2-8 11:58
函数不能在doCmd.RunSQL中执行,你可以在查询中执行
作者: aslxt    时间: 2012-2-8 14:03
Public Function datedistance(ByVal a As Date, ByVal b As Date) As Date

If b < a Then
MsgBox "后面日期小于前面日期,请检查取值是否正确"
Else
If Year(a) = Year(b) Then
  If Month(a) = Month(b) Then
    datedistance = Day(b) - Day(a) + 1
    Else
    datedistance = Day(b)
  End If
  Else
datedistance = Day(b)
End If
End If

End Function

作者: yanghua1900363    时间: 2012-2-8 14:41
检查一下是否把函数Public Function datedistance(a, b) 放在公用模块?

作者: wuwt918    时间: 2012-2-8 15:14
Grant 发表于 2012-2-8 11:58
函数不能在doCmd.RunSQL中执行,你可以在查询中执行

在查询中执行也不行呢,一样的报 未定义函数
作者: wuwt918    时间: 2012-2-8 15:14
yanghua1900363 发表于 2012-2-8 14:41
检查一下是否把函数Public Function datedistance(a, b) 放在公用模块?

放在了“通用”模块里面
作者: wuwt918    时间: 2012-2-8 15:15
aslxt 发表于 2012-2-8 14:03
Public Function datedistance(ByVal a As Date, ByVal b As Date) As Date

If b < a Then

改了后还是不行
作者: wuwt918    时间: 2012-2-8 15:38
fnsmydyang 发表于 2012-2-8 11:54
发个实例看看能否解决。(在论坛上求解决问题上传附件是最好的方法)

其实我很想自己摸索前进,但是确实比较费时间,所以还是听君言把实例发上来:

1.我是酒店的工作人员,我想做成这样的效果,工程部把抄表数录入进去,管宿舍的在宿舍管理窗口录入相关的信息,然后生成费用,该扣员工的就扣员工的,该进公司费用的进公司费用。

2.工程抄表计算费用的比较容易做。宿舍的酒纠结了,主要有以下问题:
  2.1 每个员工每月在这个宿舍住了多少天?这就是我发这个贴自定义函数又通不过的原因
  2.2 每个员工都要按住宿舍的天数分摊本宿舍的电费,我用了   “天数/sum(天数)” 可是提示聚合函数在此不能用的提示,这个我一直都搞不懂怎么办,很多其他场合都不会弄
  2.3还有一个动态列的问题,比如:1月要用1月的用量,2月要用2月用量
3.如果现在的模型实在建立的很差,有时间的老师能否建个给我学习学习

4.对于我特别重要的:如何才能系统的、全面的学习ACCESS ?
作者: 轻风    时间: 2012-2-8 16:05
你应该把你的自定义函数放到一个模块中。另外,还有很多问题存在,你继续慢慢调试,有问题再问。
作者: aslxt    时间: 2012-2-8 17:33
wuwt918 发表于 2012-2-8 15:38
其实我很想自己摸索前进,但是确实比较费时间,所以还是听君言把实例发上来:

1.我是酒店的工作人员, ...

我在4楼的回复是经过2003版本测试的!
你的实例版本太高,打不开。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3