【问题标题】:Change cell color based on value of another cell根据另一个单元格的值更改单元格颜色
【发布时间】:2013-06-17 14:14:37
【问题描述】:

我正在尝试运行一个代码,该代码在按下按钮时会从另一张表(标记为“MFG PNs”)的列(“H”)中找到一个单元格,并将其值与单元格“Z21”中输入的值相匹配“在我标有“SPC”的工作表上。一旦找到 H 中的单元格,我就会尝试将同一行上 Q 列中的相应单元格更改为不同的颜色。

我目前收到此错误消息:“运行时错误 9,下标超出范围” 它发生在代码的颜色变化部分。

Sub Approve_Click()

   Dim r As Long
    Dim m As Long
    m = Sheets("MFG PNs").Range("H3:H1200").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
    For r = 1 To m
        If Sheets("MFG PNs").Range("H" & r) = Sheets("SPC").Range("Z21") Then
            Sheets("MFG PNs").Range("Q" & r).Interior.ColorIndex = RGB(0, 97, 0)
        End If
    Next r

End Sub

【问题讨论】:

    标签: excel vba colors find


    【解决方案1】:

    颜色索引是从 1 到 56(见下文)的值,RGB 颜色值通常比这个大很多。

    您可以将 .ColorIndex 更改为 .Color 并输入适当的颜色,或将 RGB(0,97,0) 更改为特定的索引值。

    可以使用 VBA 代码here,在工作表上生成颜色索引和值。

    【讨论】:

    • 谢谢!这是一个非常简单的修复。哈哈
    【解决方案2】:

    在测试您的代码时,我确实发现了另一个问题:当找不到目标字符串 ("*") 时它会崩溃。下面的更正应该说明这一点:

        Set cell = Sheets("MFG PNs").Range("H3:H1200").Find(What:="*", SearchOrder:=xlByRows, SearchDirection:=xlPrevious)
    
        If (Not cell Is Nothing) Then
           For r = 1 To cell.Row
            'YOUR CODE
           Next r
        End If
    

    【讨论】: