1

我正在尝试根据某些条件在 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
4

2 回答 2

0

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

ElseIf cell.Value = vbNullString Then
于 2013-03-27T22:19:06.930 回答
0

您的两个代码几乎都在那里。以下两者的组合应该可以完成这项工作:

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
于 2013-03-27T22:21:30.650 回答