如何使用Worksheet_Change事件进行条件格式化?

时间:2009-12-15 23:03:20

标签: excel-vba vba excel

我有一个包含任务列表的工作表,每行一个。列A是任务名称,列B是必须完成的日期,列C是必须执行此操作的人员。 D列用于表示何时完成。如果此列包含任何内容,则整行的背景颜色应为灰色,否则应为白色。

我认为worksheet_change事件是解决此问题的最佳方法。我想我可以使用条件格式,但是如果细胞被拖拽,那似乎很容易破坏 - 我需要这样做尽可能“防弹”!

在伪代码中,我正在努力实现以下目标:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target includes a cell in column "D"
        If "D" is not empty
            Set entire row background to grey
        Else
            Set entire row background to white
        End If
    End If
End Sub

有人能给我任何关于实现这个的最佳方法的指示吗?我是在正确的路线上,还是有更好的方法?

2 个答案:

答案 0 :(得分:1)

我认为你可以在每个细胞上使用以下条件:

=INDIRECT("$D" & ROW())>0

我做了一些复制/粘贴并拖动了细胞,条件格式没有破坏。

答案 1 :(得分:0)

使用条件格式:

转到Tools->Options->General并激活R1C1 reference style

条件:=ISEMPTY(RC4)

使用VBA:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim found As Range
Dim cell As Range
Dim colStart As Integer
Dim colEnd As Integer

    Set found = Intersect(Target, Me.Columns(4))
    colStart = 1
    colEnd = 4

    If Not found Is Nothing Then
        For Each cell In found
            With Me.Range(Me.Cells(cell.Row, colStart), Me.Cells(cell.Row, colEnd)).Interior
                If IsEmpty(cell) Then
                    .ColorIndex = 15
                Else
                    .ColorIndex = xlNone
                End If
            End With
        Next cell
    End If

    Set found = Nothing
End Sub

我建议使用条件格式