Vba 根据日期和其他条件高亮显示单元格

Vba 根据日期和其他条件高亮显示单元格,vba,excel,conditional,highlight,Vba,Excel,Conditional,Highlight,我试图在VBA中编写一个基于特定条件的突出显示函数。我可以通过条件格式轻松实现这一点,但我注意到,如果用户剪切/粘贴特殊/删除行等以外的内容,则条件格式范围会被修改。我希望条件格式范围保持固定,而不是映射到实际单元格。如果有人知道如何做到这一点,或者保护条件格式,但仍然允许数据操作,那么这段代码将是不必要的 我发现了两种不同的代码,我一直在尝试,但由于我是VBA新手,我不是很擅长它,并遇到了问题。我不知道如何使用Isblank或Isempty功能 我需要强调从现在起30天之前的日期,包括以红色传

我试图在VBA中编写一个基于特定条件的突出显示函数。我可以通过条件格式轻松实现这一点,但我注意到,如果用户剪切/粘贴特殊/删除行等以外的内容,则条件格式范围会被修改。我希望条件格式范围保持固定,而不是映射到实际单元格。如果有人知道如何做到这一点,或者保护条件格式,但仍然允许数据操作,那么这段代码将是不必要的

我发现了两种不同的代码,我一直在尝试,但由于我是VBA新手,我不是很擅长它,并遇到了问题。我不知道如何使用Isblank或Isempty功能

我需要强调从现在起30天之前的日期,包括以红色传递的日期。我需要用黄色突出显示60天之前但30天以上的日期。没有数据的单元格和超出60天的单元格必须保持不亮状态

非常感谢您的帮助

Private Sub Worksheet_Change(ByVal Target As Range)

Dim icolor As Integer

    If Not Intersect(Target, Range("C3:T65")) Is Nothing Then

        Select Case Target

            Case Is <= Date + 60

                icolor = 6

            Case Is <= Date + 30

                icolor = 3

            Case IsEmpty()

                icolor = 2

        End Select


        Target.Interior.ColorIndex = icolor

    End If

End Sub
其他选择:

Sub Highlight()
    Dim cell As Range

    For Each cell In Range("C3:T65")
        If cell.Value <= Date + 60 And cell.Value > Date + 30 Then
            cell.Offset(0, 1).Interior.ColorIndex = 6

        ElseIf cell.Value <= Date + 30 Then
            cell.Offset(0, 1).Interior.ColorIndex = 3

        ElseIf cell.Value IsEmpty() Then
            cell.Offset(0, 1).Interior.ColorIndex = 2

        End If
    Next cell

End Sub

使用VBNullString检查单元格是否为空:

ElseIf cell.Value = vbNullString Then

你的密码都差不多了。以下两者的组合应能完成此工作:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim icolor As Integer
    Dim cell As Range

    If Intersect(Target, Range("C3:T65")) Is Nothing Then Exit Sub

    For Each cell In Target
        icolor = 0
        Select Case cell
            Case Is <= Date + 30: icolor = 3
            Case Is <= Date + 60: icolor = 6
            Case "": icolor = 2
        End Select
        If icolor <> 0 Then cell.Interior.ColorIndex = icolor
    Next cell
End Sub

这是我上面列出的第二个编码,而不是ElseIf单元格。那么值是空的吗?确实如此。你几乎做到了,但是你在条件中使用了一个电子表格公式,我操纵了上面Peter Albert的代码,它工作得很好。我刚刚尝试使用您的更改,脚本返回时没有出现错误,但它无法正确突出显示。许多随机细胞被突出显示为红色。我试图重新安排ElseIf和If代码,看看它是否可以做任何事情,但随后它会带来新的突出显示问题。谢谢你的帮助,没问题。如果将来需要检查空白单元格或字符串,至少现在知道了!我得到一个编译错误:Case没有选择Case,Case单元格突出显示。我是否在某个地方插入了一个Do Select?我在大小写单元格之前插入了Select,结果成功了。但是,现在我遇到了一个问题:如果我选择一个单元格并点击Backspace,那么该单元格将变为黄色,尽管它是空的。而且,情况是我发现了。我把箱子线按相反的顺序重新排列,它把它修好了。非常感谢你@user2214690:很抱歉缺少Select-我编辑了代码并颠倒了顺序。谢谢你的评论!