使用 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的主要内容,如果未能解决你的问题,请参考以下文章

当字段名称是动态的时,vba 制作表格

允许 HTML5 日期输入中的空值 [重复]

sql如何按日期中的月份查询

VBA中日期之间的SQL查询

通过 VBA 函数在查询中添加新的计算字段

在 Access 查询中处理空日期值