Excel 如何使用工作表更改事件进行条件格式设置?

Excel 如何使用工作表更改事件进行条件格式设置?,excel,vba,Excel,Vba,我有一个工作表,其中包含一个任务列表,每行一个。A列是任务名称,B列是必须完成任务的日期,C列是必须完成任务的人员。D列用于指示何时完成。如果此列包含任何内容,则整行的背景色应为灰色,否则应为白色 我认为工作表\u change事件是处理此问题的最佳方式。我想我可以使用条件格式,但如果单元格被拖来拖去,它似乎很容易被破坏——我需要它尽可能“防弹” 在伪代码中,我试图实现以下目标: Private Sub Worksheet_Change(ByVal Target As Range) If

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

我认为
工作表\u 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

有谁能给我指点一下实现这一点的最佳方法吗?我的思路是否正确,或者有更好的方法吗?

我认为您可以在每个单元格上使用以下条件:

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

我做了一些复制/粘贴并拖动单元格,条件格式没有中断。

条件格式:

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
转到
Tools->Options->General
并激活
R1C1参考样式

条件:
=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
我建议使用条件格式