VBA仍然不太好......
Sub CompareDates()
Dim dueDate As Date, sht As Worksheet, i As Long
For Each sht In ThisWorkbook.Sheets
For i = 1 To CountMyRows(sht.Name)
dueDate = CDate(sht.Range("E" & i))
If dueDate > Date Then
sht.Range("E" & i).Interior.ColorIndex = 5
End If
Next i
Next sht
End Sub
导致类型不匹配:
dueDate = CDate(sht.Range("E" & i))
我不知道为什么这不起作用我有别人测试它并且它适用于他们的。
编辑:我已经摆脱了错误但代码没有工作并突出显示所有逾期的任务......
答案 0 :(得分:0)
每次都在'For'循环中失败吗?
dueDate = CDate(sht.Range("E" & i))
当sht.Range("E" & i))
将返回文本时,将失败。
尝试首先将sht.Range("E" & i))
分配给变量,如:
For i = 1 To 5
c_date = sht.Range("E" & i)
dueDate = CDate(c_date)
If dueDate > Date Then
sht.Range("E" & i).Interior.ColorIndex = 5
End If
Next I
因此您可以更好地跟踪进度 - 也许您的基础数据无法进行此类比较(这不是日期)
答案 1 :(得分:0)
您可以在使用IsDate
之前使用CDate
来防止错误。 CDate
仅在您传入实际可以转换为日期的值时才有效。
您可以将代码更改为:
Option Explicit
Sub CompareDates()
Dim dueDate As Date, sht As Worksheet, i As Long
For Each sht In ThisWorkbook.Sheets
For i = 1 To CountMyRows(sht.Name)
If IsDate(sht.Range("E" & i).Value) Then '<-- check if value is a date
dueDate = CDate(sht.Range("E" & i))
If dueDate > Date Then
sht.Range("E" & i).Interior.ColorIndex = 5
End If
End If
Next i
Next sht
End Sub
示例 - 注意它不会像2017年7月13日那样工作: