【问题标题】:Where is the error in my code VBA checking date我的代码 VBA 检查日期中的错误在哪里
【发布时间】: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 为当前它会变成黄色并且永远不会改变这是我的问题
  • 是的,它是&lt;0,因为它是 2 天前的。
  • @Dany7elo 您能否编辑您的问题以明确条件,这似乎令人困惑。
  • @Dany7elo 我的解决方案有效吗?最好通过点击赞成/反对票下方的按钮来接受我的回答!

标签: vba excel if-statement


【解决方案1】:

If IsEmpty(Cells(i, 3)) Then Exit Sub 是你的问题。 如果范围内有空白单元格,如果找到,您的代码将停止。

编辑这一行。您的代码将运行良好。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-08
    • 2015-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多