比较日期以填充适当的颜色

时间:2017-10-10 11:46:19

标签: excel vba excel-vba if-statement

在excel中使用VBA我有一个代码,用于将输入的日期与当前日期进行比较,并根据结果,系统将以正确的颜色填充单元格。

其中代码在四个条件下进行比较。 如果输入的日期减去当前值:

  • = 0
  • 少于0
  • 介于1和4之间
  • 介于4到10之间

使用IF语句,但系统给出错误,错误在哪里以及如何解决?

的代码:

Private Sub CommandButton1_Click()

Dim i As Integer


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 Exit Sub

       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 = vbBlue

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


End If

Next
End Sub

1 个答案:

答案 0 :(得分:1)

Exit Sub放入下一行。或者甚至更好,删除该行代码以允许处理所有行,例如......

Private Sub CommandButton1_Click()

Dim i As Integer


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


       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
       Debug.Print VBA.CDate(Cells(i, 3)) - VBA.Date()
              Cells(i, 3).Interior.Color = vbBlue

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

       Else
       Cells(i, 3).Interior.Color = vbWhite
       End If

Next
End Sub