Excel VBA IsDate函数将文本误认为日期

时间:2019-05-21 15:15:47

标签: excel vba

我试图在Excel VBA中执行日期计算,但是即使Excel的IsDate()返回true,我也遇到运行时错误13(类型不匹配)。

在Excel中,我有以下数据
A2:输入“ 5/20”显示为“ 5月20日”
A3:输入“ 5/20 12:00 p”显示为“ 2019/05/20 12:00”
A4:输入“ 5/20 12:00p”显示为“ 5/22 12:00p”
  
我已经验证了单元格A2和A3可以显示为数字而不是日期。单元格A4仅显示为文本/字符串,但VBA IsDate()仍在A4上传递。

Private Sub Date_Errors()
Dim MyRng As Variant
Set MyRng = ActiveSheet.Range("A2", "A4")
For Each cell In MyRng
    If IsDate(cell) Then ' make sure the cell has a date
        If cell.Value < Date Then
            MsgBox ("Before")
        ElseIf (cell.Value - 1) < Date Then
            MsgBox ("Older")
        End If
    Else
        MsgBox ("Not a date")
    End If
Next
End Sub

MsgBox正确显示为单元格A2和A3,但是不匹配错误出现在“ ElseIf(cell.value-1)”行上。为什么IsDate(cell)不能抓住这个问题并陷入其他情况?

1 个答案:

答案 0 :(得分:2)

来自Microsoft帮助:

Dim MyVar, MyCheck
MyVar = "04/28/2014"    ' Assign valid date value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "April 28, 2014"    ' Assign valid date value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "13/32/2014"    ' Assign invalid date value.
MyCheck = IsDate(MyVar)    ' Returns False.

MyVar = "04.28.14"    ' Assign valid time value.
MyCheck = IsDate(MyVar)    ' Returns True.

MyVar = "04.28.2014"    ' Assign invalid time value.
MyCheck = IsDate(MyVar)    ' Returns False.

换句话说,它将捕获到日期的所有内容,但是实际上您有一个字符串,因此您不能从字符串中减去1。解决办法?

Dim MyDate As Date
If IsDate(Cell) Then
MyDate = Cell

然后您使用MyDate代替Cell