Excel VBA不会更改单元格颜色

时间:2013-06-08 15:07:10

标签: excel vba colors background cell

我需要理解为什么我的代码不会修改单元格的背景颜色(我不想使用条件格式化)

Function myCheck(ToVerify As Range, RightValue As Range) As Boolean
    Dim rng1 As Range
    Dim rng2 As Range

    For Each rng1 In ToVerify.Cells
        For Each rng2 In RightValue.Cells       
            If (rng1.Value <> rng2.Value) Then
                rng1.Interior.Color = RGB(255, 0, 0)
                'rng1.Cells.Interior.Color = RGB(0, 255, 0)
                'rng1.Cells.Interior.ColorIndex = 10
                'rng1.Interior.ColorIndex = 10
            End If
        Next rng2
    Next rng1

    SignIfError = True

End Function

我已经使用此代码来确定一行中的哪些单元格(ToVerify)没有特定单元格的相同值(RightValue)。我需要让这些细胞可见,然后我想改变它们的背景颜色。问题是Excel不会更改此单元格的背景颜色。我确定单元格值满足If语句中的条件。被评论的IF语句中的行是我的其他尝试,但这些都没有奏效。

我在哪里做错了?

1 个答案:

答案 0 :(得分:1)

我将假设RightValue只是一个值,而不是它们的整个范围。在这种情况下,这可能会做你想要的:

Sub myCheck(ToVerify As Range, RightValue As Variant)
Dim cell As Range

For Each cell In ToVerify.Cells
    If cell.Value <> RightValue Then
        cell.Interior.Color = RGB(255, 0, 0)
    'else make it white
    Else
        cell.Interior.Color = RGB(255, 255, 255)
    End If
Next cell
End Sub

请注意,我已将其从Function更改为Sub。因为您似乎不需要返回值。我也在最后摆脱了SignIfError = True,因为只有Function才需要。

您可以这样称呼它:

myCheck ActiveSheet.Range("A1:A5"), 3

如果你想使用单元格中的值来调用RightValue,你可以这样称呼它:

myCheck ActiveSheet.Range("A1:A5"), ActiveSheet.Range("B1").Value