where is the error in the second IF statement

时间:2017-10-19 12:43:15

标签: excel vba if-statement is-empty

i have VBA code that check entered dates with the current date and fill the cell in the appropriate color and check if the colomn "F" is not empty it will color the D,E,F columns.

the problem is that i have until now 21 records but the system just color 19 record even so the 2 rows are not empty in the F column.

code:

Private Sub CommandButton1_Click()

Dim i As Long

For i = Range("C5000").End(xlUp).Row To 2 Step -1 'Range upto 5000, chnge this as per your requirment'

    If IsEmpty(Cells(i, 3)) Then
         Cells(i, 3).Interior.Color = xlNone

       ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) < 0 Then
             Cells(i, 3).Interior.Color = vbGreen

       ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) = 0 Then
             Cells(i, 3).Interior.Color = vbYellow

       ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 1 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 4 Then
              Cells(i, 3).Interior.Color = vbRed

       ElseIf (VBA.CDate(Cells(i, 3)) - VBA.Date()) >= 5 And (VBA.CDate(Cells(i, 3)) - VBA.Date()) <= 10 Then
               Cells(i, 3).Interior.Color = vbCyan

    Else
                Cells(i, 3).Interior.ColorIndex = xlNone

 End If

    ' your 2nd criteria to color the entire row if "F" is not empty
    If Trim(Range("F" & i).Value) <> "" Then Range("D" & i & ":F" & i).Interior.ColorIndex = 15



Next
End Sub

2 个答案:

答案 0 :(得分:1)

如果单元格中包含非日期值,ElseIf语句将抛出Runtime Error 13。这是因为尝试将非日期值转换为日期VBA.CDate(Cells(i, 3))

Private Sub CommandButton1_Click()
    Dim i As Long
    With Worksheets("Sheet1")
        For i = Range("C" & .Rows.Count).End(xlUp).Row To 2 Step -1    'Range upto 5000, chnge this as per your requirment'

            If IsDate(Cells(i, 3)) Then
                Select Case VBA.CDate(.Cells(i, 3)) - VBA.Date()
                    Case Is < 0
                        .Cells(i, 3).Interior.Color = vbGreen
                    Case Is = 0
                        .Cells(i, 3).Interior.Color = vbYellow
                    Case Is <= 4
                        .Cells(i, 3).Interior.Color = vbRed
                    Case Is <= 10
                        .Cells(i, 3).Interior.Color = vbCyan
                    Case Else
                        .Cells(i, 3).Interior.ColorIndex = xlNone
                End Select

            Else
                .Cells(i, 3).Interior.ColorIndex = xlNone
            End If

            ' your 2nd criteria to color the entire row if "F" is not empty
            If Trim(.Range("F" & i).Value) <> "" Then .Range("D" & i & ":F" & i).Interior.ColorIndex = 15
        Next
    End With
End Sub

答案 1 :(得分:0)

可能与您的数据有关,它可以正常运行给我。你在F栏中有什么样的数据?