使用 VBA 函数输出的查询中的空日期/时间字段 #Error
Posted
技术标签:
【中文标题】使用 VBA 函数输出的查询中的空日期/时间字段 #Error【英文标题】:Empty date/time field in a query using a VBA Function outputs #Error 【发布时间】:2014-01-23 13:54:31 【问题描述】:在查询中,我有(除其他外)两列:start_date_time 和 end_date_time。在下一列中,我想计算持续时间(= end_date_time - start_date_time)。对于此计算,我使用 VBA(我使用 VBA 是因为我只计算持续时间介于用户在主窗体的两个字段中任意定义的开始日期和结束日期之间的时间)。
现在,当 start_date_time 和 end_date_time 列中定义了日期和时间时,计算就可以了。当这两个字段为空时,问题就出现了。在这种情况下,我会在“持续时间”字段中看到“#error”标志。
我已经尝试创建一个条件来摆脱这个“#error”并将其更改为 0。我试图找出空字段是否为 null、缺失或为空,但没有成功。只要这些字段中没有数据,我就会在“持续时间”列的字段中看到“#error”符号。
我错过了什么吗?如何将此“#error”标志更改为例如0。 提前谢谢你
我用于计算的函数是:
Function DurationInterval(BegginingDate As Date, FinishDate As Date, start_date_time As Double, end_date_time As Double) As Double
If start_date_time >= BegginingDate And start_date_time <= FinishDate Then
DurationInterval = end_date_time - start_date_time
End If
End Function
然后我在查询的构建器中调用这个函数:
trajanje: DurationInterval([Forms]![Glavna stran]![Besedilo39];[Forms]![Glavna stran]![Besedilo43];[Zacetek sestanka];[Konec sestanka])
【问题讨论】:
您能否发布您用于调用此函数的计算和查询的代码? 【参考方案1】:您收到#Error
结果是因为您的函数声明将您的时间指定为Double
,因此它们无法接收Null
值。如果您希望能够将Null
值传递给您的函数,您需要声明参数As Variant
,然后使用IsNull()
函数检查它们是否为空。
例如,如果我有以下功能
Option Compare Database
Option Explicit
Public Function TimesTwo(SourceValue As Long) As Long
TimesTwo = SourceValue * 2
End Function
我在源列可以有空值的查询中使用它
SELECT thing, TimesTwo(thing) AS thing2 FROM table1
那么空值的行将返回#Error
thing thing2
----- ------
1 2
2 4
#Error
4 8
但是,如果我将功能更改为
Option Compare Database
Option Explicit
Public Function TimesTwo(SourceValue As Variant) As Variant
If IsNull(SourceValue) Then
TimesTwo = Null
Else
TimesTwo = SourceValue * 2
End If
End Function
然后我得到
thing thing2
----- ------
1 2
2 4
4 8
【讨论】:
以上是关于使用 VBA 函数输出的查询中的空日期/时间字段 #Error的主要内容,如果未能解决你的问题,请参考以下文章