2013-11-28 405 views
1

我有兩個不同日期的文本框,orderDate和recievedDate。在收到日期需要手動輸入到表格,我想包括該recievedData應訂購日期之後發生的驗證,我曾嘗試:在VBA中比較日期

If txtRecievedDate.Text < txtOrderDate.Text Then 

    MsgBox "Incorrect Date, item can't be recieved before order" 

else  

    MsgBox "correct date" 

End If 

這不,例如RecievedDate值是工作「 19/11/2013「,OrderDate的值是」2013年10月20日「,雖然這是正確的日期,但此語句僅比較」19「和」20「,因此將其標記爲不正確。

有沒有辦法比較文本框中的兩個日期?對於使用VBA

感謝

+1

爲什麼使用文本框輸入日期?參見[THIS](http://stackoverflow.com/questions/12012206/formatting-mm-dd-yyyy-dates-in-textbox-in-vba/12013961#12013961) –

回答

1

此IM這裏是你如何修復你的代碼。當然,這不是進行日期計算的最佳方式,而且您還必須驗證2個文本框中是否有文本,並且甚至可以使用CDate()來解析文本到日期值,但這會適用於當前情況。

If DateDiff("d", txtOrderDate.Text, txtRecievedDate.Text) < 0 Then 

    MsgBox "Incorrect Date, item can't be recieved before order" 

else  

    MsgBox "correct date" 

End If 
1

除了亞洲時報Siddharth潰敗在Formatting MM/DD/YYYY dates in textbox in VBA的優秀的解決方案,我會建議按照以下步驟。 UserForm是Excel中的一個自然對象,但我們應引用OCX對象以在Access中使用它,因此不能直接使用。

與形式對象的訪問,我們可以做到這一點:

Sub sof20270928CompareDates() 
    If CDate(txtRecievedDate.Value) < CDate(txtOrderDate.Value) Then 
    MsgBox "Incorrect Date, item can't be recieved before order" 
    Else 
    MsgBox "correct date" 
    End If 
End Sub 

,而不是比較的文本字符串,我們比較現在的日期。 CDate()將本地日期時間字符串轉換爲日期類型。美國人會以mm/dd/yyyy格式輸入日期,例如2013年11月19日,在法國,類型爲dd/mm/yyyy,例如19/11/2013。當Access考慮計算機的區域設置時,CDate()將處理此問題。

此外,txtRecievedDate.Value優先於txtRecievedDate.Text,後者需要焦點,即控件必須處於活動狀態才能獲得.text屬性。

2

試戴日期格式的.text格式的比較,而不是

例如

Sub datee() 
Dim Orderdate As Date 

Dim Recievedate As Date 

Orderdate = Worksheets("Sheet1").Range("A1").Value 
Recievedate = InputBox("Enter date recieved") 

If Recievedate < Orderdate Then 
MsgBox "error" 
Exit Sub 
Else 
Worksheets("sheet1").Range("a3").Value = Recievedate 
End If 


End Sub 
0

如果你想比較有日期,而不是時間,那麼函數DATEVALUE將刪除時間日期和時間值以便於比較。