2017-05-25 294 views
0

我試圖編寫一個宏,它根據列L中的值更改顏色。如果L列中的單元格爲YES,則Hightlight列B單元格爲紅色。但是,下面的宏不起作用或失敗。它運行但什麼都不做。Excel VBA - 單元格顏色更改

Sub ColorMeElmo() 
    Dim i As Long, r1 As Range, r2 As Range 
    For i = 2 To 5 
    Set r1 = Range("L" & i) 
    Set r2 = Range("B" & i & ":B" & i) 
    If r1.Value = "YES" Then r2.Interior.Color = vbRed 
    Next i 
    End Sub 
+3

爲什麼不使用條件格式? –

+2

適合我。你在L2:L5範圍內的任何地方都有「YES」嗎? (注意:不只是「是」,實際上是「是」) – YowE3K

+1

HI Scott,我會提供給用戶,我認爲宏將更容易運行。 – user7675421

回答

1
Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim CCell As Range 
    Dim sht As Worksheet 
    Set CCell = Range("L:L") 
    Set sht = Worksheets("SheetName") 
    If Target.Count = 1 Then 
     If Not Application.Intersect(CCell, Range(Target.Address)) _ 
      Is Nothing Then 
       If Target.Value = "YES" Then 
        sht.Cells(Target.Row, 2).Interior.Color = RGB(255, 0, 0) 
       End If 
     End If 
    End If 
End Sub 
1

把它放在你想要觀看的圖表中。

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim CCell As Range 
    Dim sht As Worksheet 
    Set CCell = Range("L:L") 
    Set sht = Worksheets("Sheet1") 'EDIT 
    If Target.Count = 1 Then 
     If Not Application.Intersect(CCell, Range(Target.Address)) _ 
      Is Nothing Then 
       If Target.Value = "YES" Then 
        sht.Cells(Target.Row, 2).Interior.Color = RGB(255, 0, 0) 
       End If 
     End If 
    End If 
End Sub 
+2

只是一個提示 - 在檢查「Target」中是否有多個單元格之前,請小心使用Target.Value =「YES」' - 如果嘗試將數組與字符串進行比較,VBA將會報錯。例如。如果用戶改變了單元格'L5:L10',可能是複製/粘貼,那麼這將會崩潰。 (如果用戶只做我們想讓他們做的事情,生活會變得簡單!) – YowE3K

+0

感謝您的提示,我修改了它;) – UGP