我试图在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)不能抓住这个问题并陷入其他情况?
答案 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