在我的工作表中,第4列中的单元格包含公式。有时公式会返回一个数字,有时会返回字符串"数据!"。对于后一种结果,我希望字体颜色变为红色。以下事件处理程序代码失败:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'font color red if error
If Target.Column = 4 Then
If Target = "data!" Then
Range("D" & Target.Row).Font.ColorIndex = 3
Else
Range("D" & Target.Row).Font.ColorIndex = 1
End If
End If
Application.EnableEvents = True
End Sub
也许代码看到公式而不是公式返回的值,所以我添加了evaluate方法来对Target进行操作:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
'font color red if error
If Target.Column = 4 Then
If Evaluate(Target) = "data!" Then
Range("D" & Target.Row).Font.ColorIndex = 3
Else
Range("D" & Target.Row).Font.ColorIndex = 1
End If
End If
Application.EnableEvents = True
End Sub
这也行不通。没有错误,只是没有字体颜色变化。有什么问题?
答案 0 :(得分:1)
据我所知,Worksheet_Change的目标是单个单元格(您单击并编辑的单元格)。当我修改您的第一个代码示例以使用
时If Target.Value = "data!" Then
它运作得很好。每当我输入"数据!"在第4列的单元格中,它会将字体颜色更改为红色。虽然细胞的值确实随公式而变化,但细胞本身并不被认为是变化的目标。 -event。
如果你想检查整个列并一次更新所有颜色 - 我知道有两个选项:
Here's有关如何实现条件格式的一些信息。还有this问题与使用VBA创建条件格式有关。
例如,可以调用这个小方法为单元格着色。
Sub Main()
Dim r As Range
Set r = ThisWorkbook.Sheets(1).Range("D:D").SpecialCells(xlCellTypeFormulas)
r.Cells.Font.ColorIndex = 0
For Each Cell In r
If Cell.Value = "data!" Then Cell.Font.ColorIndex = 3
Next
End Sub
编辑:只要工作表计算公式时调用Main方法,就可以添加
Private Sub Worksheet_Calculate()
Call Main
End Sub
到您要使用该功能的工作表的代码。每当公式计算时,这将自动更新范围的颜色,这应该是期望的效果。
HTH