2014-07-13 16 views
0

我试图上色A列中各行基于COL B,C,D。基于其它列VBA到彩色行值

的行颜色

说A2颜色基于B2的颜色, C2,D2。其中任何一项有红色,则A2应该是红色其他A2得到绿色

请在下面找到我的代码:

Option Explicit 

Sub Sheet1() 

Dim lastR As Long 
Dim i As Long 

lastR = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row 

For i = lastR To 2 Step -1 

    If ((Sheets("Sheet1").Cells(i, "B")) Or (Sheets("Sheet1").Cells(i, "C")) Or (Sheets("Sheet1").Cells(i, "D"))) = Rows(i).Interior.Color = RGB(255, 0, 0) Then 
     Rows(i).Interior.Color = RGB(0, 255, 0) 
    End If 

Next i 

End Sub 

我得到标超出范围,错误代码9

这是我的excel丝网印刷:

enter image description here

回答

0

试试这个:

Sub Sheet1() 
    Dim rng As Range, cl As Range 

    For Each cl In Worksheets("Sheet1").Range("A2:A" & Cells(Rows.Count, "A").End(xlUp).Row) 
     If cl.Offset(0, 1).Interior.Color = 255 Or cl.Offset(0, 2).Interior.Color = 255 Or cl.Offset(0, 3).Interior.Color = 255 Then 
      cl.Interior.Color = 255 
     End If 
    Next cl 
End Sub 
+0

这仍然会抛出错误下标超出范围 –

+0

在哪一行你会得到错误?这对我来说可以。 –

-1

更改单元格引用这个样子(例如列B):

Cells(i, 2) 

如果你使用Range(),你可以在风格上做到这一点,你试过,但你需要的值连接成的“A1”风格的单元格引用,就像这样:

Range("B" & i) 
0

我认为这个问题是在lastR = Sheets("Sheet1").Cells(Rows.Count, "A").End(xlUp).Row

Sheets("Sheet1").Cells(Rows.Count, "A")将找到最后一个单元格,然后.End(xlUp)将再次将选择带到第一行。

当你说然后For i = lastR To 2 Step -1你可能想从第一行走到第二步,用-1步。这是不可能的。