我有两个带有两个不同日期的文本框,orderDate和recievedDate。收到的日期需要手动输入到表单中,我想在orderDate之后包含recievedData应该发生的验证,我试过了:
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值为“20/10/2013”,尽管这是一个正确的日期,此语句仅比较“19”和“20” “因此将其标记为不正确。
有没有办法比较文本框中的两个日期?为此我使用VBA
谢谢
答案 0 :(得分:3)
以下是修改代码的方法。当然,这不是进行日期计算的最佳方式,您还必须验证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 :(得分:1)
除了Formatting MM/DD/YYYY dates in textbox in VBA的Siddharth Rout的优秀解决方案外,我建议采用以下程序。 UserForm是Excel中的自然对象,但我们将引用OCX对象以在Access中使用它,因此不能直接使用。
在Access with form object中,可以这样做:
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 :(得分:1)
尝试以日期格式而不是.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
答案 3 :(得分:0)
如果您只想比较日期而不是时间,那么函数DATEVALUE将从日期和时间值中删除时间以便于比较。