检查单元格范围的ColorIndex属性

时间:2014-05-29 08:12:14

标签: excel vba excel-vba excel-2010

我有奇怪的问题。让我们说我有A5-J5的细胞范围,我修补它们的颜色。我根据某些条件更改了ColorIndex属性。如果整个范围具有相同的颜色,我想触发一些动作。很容易。当我手动更改范围内所有单元格的颜色(对于ColorIndex为1的黑色)时,下面的代码返回" TRUE"一切正常。

Sub test()
    If Range(Cells(5, 1), Cells(5, 10)).Interior.ColorIndex = 1 Then
        MsgBox "TRUE"
    Else
        MsgBox "FALSE"
    End If
End Sub

但是我当然不希望手动更改细胞填充。我正在使用VBA代码,在满足某些条件时更改其ColorIndex。使用VBA代码将整个范围更改为ColorIndex = 1后,以下代码返回FALSE。

Sub testt()

    If Range(Cells(5, 1), Cells(5, 10)).Interior.ColorIndex = 1 Then
        MsgBox "TRUE"
    Else
        MsgBox "FALSE"
    End If

    Dim i As Integer
    For i = 1 To 10
        MsgBox Cells(5, i).Interior.ColorIndex & " Cell no " & i

    Next i
End Sub

检查此范围内的每个单元格是否具有相同的ColorIndex I循环。每个单元格都有ColorIndex = 1。但是整个范围看起来不是 - 因为它返回FALSE。只有当我用VBA改变单元格的颜色时才会发生这种情况,当我这样做时,一切都运行得很好。

我知道我没有提供太多细节,但也许有人在这里有类似问题。很抱歉,如果这个问题太过琐碎,但我真的没有找到任何合理的解释。

1 个答案:

答案 0 :(得分:0)

我写了下面的代码,它运行得很好:

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
CheckColor
End Sub

Sub CheckColor()

Dim sh As Worksheet
Set sh = ActiveSheet

If Range(Cells(5, 1), Cells(5, 10)).Interior.ColorIndex = 1 Then
    sh.Range("A1") = "True"
Else
    sh.Range("A1") = "False"
End If

End Sub

Sub SetColor()

Dim sh As Worksheet
Dim rn As Range
Dim cl As Range

Set sh = ActiveSheet
Set rn = sh.Range("A5:J5")

For Each cl In rn
    cl.Interior.ColorIndex = 1
Next

CheckColor

End Sub