我有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
答案 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
部分是不必要的。
<强>更新强>
作为一个有趣的实验,我试了一下,看看结果如何,这是截图:
PS:由于OP没有提到差异在1到10之间的颜色,我将这些细胞染上了黑色:-P