比较VBA中的日期

时间:2013-11-28 16:32:05

标签: vba

我有两个带有两个不同日期的文本框,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

谢谢

4 个答案:

答案 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将从日期和时间值中删除时间以便于比较。