使用Case语句比较当前数据+ 10天的VBA代码

时间:2017-10-09 09:39:55

标签: excel vba excel-vba switch-statement

我有VBA代码,允许用户输入日期并用当前比较输入的日期以便以适当的颜色填充单元格,我正在使用选择案例陈述

我需要将单元格填充为红色,用户输入的日期为当天+ 10天。

怎么做?

 Private Sub CommandButton1_Click()

Dim i As Integer
Dim objDate As Date


MsgBox (objDate)

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

    objDate = Date

    Select Case VBA.CDate(Cells(i, 3))

    Case IsEmpty(i)
         Cells(i, 3).Interior.ColorIndex = 0

    Case Is < VBA.Date()
        Cells(i, 3).Interior.Color = vbGreen

    Case Is = VBA.Date()
        Cells(i, 3).Interior.Color = vbYellow

    Case Is > VBA.Date()
        Cells(i, 3).Interior.Color = vbRed


  End Select
Next

End Sub

1 个答案:

答案 0 :(得分:0)

这是实现这一目标的另一种方式。将两个日期之间的差异作为测试表达式,然后检查每个案例(即,它是否小于0,等于它,或者差异是否大于10)。

If IsEmpty(Cells(i, 3)) Then Exit Sub
Select Case (VBA.CDate(Cells(i, 3)) - VBA.Date())
    Case Is < 0
        Cells(i, 3).Interior.Color = vbGreen
    Case 0
        Cells(i, 3).Interior.Color = vbYellow
    Case Is > 10
        Cells(i, 3).Interior.Color = vbRed
    Case Else
        'Colour to be applied if the difference is between 1 and 10 (both inclusive)
End Select

此外,您对IsEmpty的测试无法按预期运行,因为您正在检查i(计数器)是否为空。它将始终返回False。除了单元格已经有ColorIndex为0.因此,除非您的代码必须检查以前的非空单元格是否为空,否则Cells(i, 3).Interior.ColorIndex = 0部分是不必要的。

<强>更新

作为一个有趣的实验,我试了一下,看看结果如何,这是截图:

Macro in action

PS:由于OP没有提到差异在1到10之间的颜色,我将这些细胞染上了黑色:-P