2016-04-22 98 views
0

我有一个表格,我从表中获取开始日期和结束日期。访问日期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" 

所以基本上我想要做的是,如果最终日期比今天早些时候,状态将显示为免费。但是,如果结束日期比今天晚,则状态将被使用。显示开始日期和结束日期为空的列也将在使用中显示。

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

当代码运行时,只有当显示一些日期比今天更早结束时,它们才会显示“正在使用”!请帮助):

+0

您的DateValue行将返回值,但不会保存在任何位置。 你有没有尝试把DateValue放入If条件? If IsNull(sd And ed)or(Datevalue(ed)> Date)Then – gizlmo

+0

@gizlmeier yeap i did!这是相同的结果,只在所有行中显示“正在使用” – user6239244

+0

这很奇怪,对我来说日期比较工作正常,如果我尝试DateValue(“2016-04-23”)>现在例如。如果您尝试将ElseIf更改为Else,该怎么办? – gizlmo

回答

0

您不会告诉startdate或enddate是否为空而另一个不是,因此两者都将为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(NZ只用于避免错误,如果ed为Null):

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

嗨,这是目前正在工作,但它只能逐一更新字段,我不得不点击每个领域的按钮更新。无论如何,点击按钮一次并更新表单中的所有字段。即时通讯使用多个项目形式 – user6239244

+0

这是目前正在工作,但它只更新窗体中的第一个字段。我如何使它如此,当我点击按钮时,它会更新表中的所有字段。 – user6239244

+0

由于这可以随时计算,因此不应将其作为值存储在字段中,而应具有返回状态的查询或仅显示表单中的当前状态。 – Gustav