工作表更改事件在功能更新时触发,但不会在工作表更改时触发

时间:2014-04-22 21:39:05

标签: vba excel-vba excel

我的工作表包含一个调用函数的单元格,它自然地返回一个值。如果值为" Filter",则应该更改单元格字体颜色。问题是,它只会在我刷新单元格中的函数时更改,而不是在工作表中的任何其他位置更改工作表时更改。我需要在任何工作表更改时更改字体颜色。为什么不是这样?

 Private Sub Worksheet_Change(ByVal Target As Range)
 Application.EnableEvents = False

'change font color to red for filter losses
If Target.Column = 2 Then
    If Target.Text = "Filter" Then
            Range("B" & Target.Row).Font.ColorIndex = 3 
    End If
End If

Application.EnableEvents = True
End Sub

我也尝试过使用工作表计算事件,如下所示,但此代码根本不起作用:

Private Sub Worksheet_calculate()
Application.EnableEvents = False

Dim cell As Range

For Each cell In Me.UsedRange.Columns("B").Cells
    If cell.Text = "Filter" Then
        Range("B" & cell.Row).Font.ColorIndex = 3
    End If
Next cell

Application.EnableEvents = True
End Sub

1 个答案:

答案 0 :(得分:2)

作为评论的后续内容,这个有效:

Private Sub Worksheet_calculate()
    Application.EnableEvents = False
    On Error GoTo ErrorHandler

    Dim cell As Range, rng As Range

    Set rng = Intersect(Me.UsedRange, Me.Range("B:B"))
    If rng Is Nothing Then GoTo ExitHere

    For Each cell In rng
       If cell.Text = "Filter" Then
           cell.Font.ColorIndex = 3
       End If
    Next cell

ExitHere:
    Application.EnableEvents = True
    Exit Sub
ErrorHandler:
    Resume ExitHere
End Sub

我稍微改变了你的事件 - 使用者更可靠 您也可以在循环之前添加rng.Font.ColorIndex = 1以重置以前的字体颜色。