键入Mismatch vba逾期日期荧光笔

时间:2017-06-29 13:04:34

标签: vba excel-vba excel

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))

我不知道为什么这不起作用我有别人测试它并且它适用于他们的。

编辑:我已经摆脱了错误但代码没有工作并突出显示所有逾期的任务......

2 个答案:

答案 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日那样工作:

enter image description here