访问日期VBA else if语句仅显示一个

时间:2016-04-22 07:07:55

标签: vba datetime if-statement null access-vba

我有一个表单,我从访问中的表中检索开始日期和结束日期。

开始日期和结束日期都称为startdate和endate。 然后我有另一列状态。

我的代码是这样的:

sd = Me.startdate
ed = Me.enddate
DateValue (sd)
DateValue (ed)

If IsNull(sd And ed) Or (ed > Date) Then
Me.Text59 = "In use"

ElseIf (ed < Date) Then
Me.Text59 = "Free"

基本上我想做的是,如果结束日期早于今天,状态将显示为Free。但是,如果结束日期晚于今天,则状态将被使用。开始日期和结束日期为空的列也将显示为使用中。

我的表的开始日期和结束日期是日期/时间数据类型。

当代码运行时,它们只显示&#34;在使用中&#34;很明显我的一些日期早于今天结束!请帮助):

1 个答案:

答案 0 :(得分:0)

你没有告诉startdate或enddate是否为Null而另一个不是,所以两者都将为Null或保持值。此外,startdate似乎总是早于enddate,因此并不重要。

然后:

Dim sd As Variant
Dim ed As Variant
Dim inuse As Boolean

sd = Me!startdate
ed = Me!enddate

If IsNull(sd) And IsNull(ed) Then
    inuse = True
ElseIf DateDiff("d", Date, ed) > 0 Then
    inuse = True
End If

If inuse = True Then
    Me!Text59 = "In use"
Else
    Me!Text59 = "Free"
End If

对于 Text59 ControlSource 的单行代码(如果ed为空,则Nz仅用于避免错误):

=IIf(IsNull([startdate]+[enddate]),"In use",IIf(DateDiff("d",Date(),Nz(ed, Date()))>0,"In use","Free"))