2016-04-22 43 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