【发布时间】:2017-10-16 12:19:30
【问题描述】:
我有一个代码,当用户单击按钮时,系统会比较当前日期和写入日期,然后用适当的颜色填充单元格。
问题是,如果我在 2 天前写了 10-16-2017,它会将背景填充为红色。如果我今天检查它必须将颜色变为黄色。 问题在于,一旦单元格被着色,它就永远不会改变颜色。
示例:
日期 10-16-2017 写于 3 年前,因此初始颜色为红色。
今天是 10-16-2017,所以当我按下按钮时,它必须变成黄色。
这是我的代码:
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 = 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
Next
End Sub
【问题讨论】:
-
这对我来说非常有效;是否有可能由于缺少工作表参考,它指向了您的错误位置?我会
Dim ws As Worksheet: Set ws = ActiveWorkbook.Sheets("Whatever_Your_Sheet_Name_Is")然后将所有范围/单元格指定为ws.Range(...)和ws.Cell(...)看看是否有帮助。 -
伙计们,问题是如果我现在写 2017 年 10 月 14 日并单击按钮,它将变为绿色...但是如果我在 2017 年 10 月 14 日写了 10-14-2107 为当前它会变成黄色并且永远不会改变这是我的问题
-
是的,它是
<0,因为它是 2 天前的。 -
@Dany7elo 您能否编辑您的问题以明确条件,这似乎令人困惑。
-
@Dany7elo 我的解决方案有效吗?最好通过点击赞成/反对票下方的按钮来接受我的回答!
标签: vba excel if-statement