VBA Excel - 设置行背景取决于单元格值

时间:2015-03-17 09:47:20

标签: excel vba excel-vba rgb

我在Excel中有这样的行:

Subject     VariableName    VariableValue
Color       vColor_Chart1   RGB(217,217,217)
Color       vColor_Chart2   RGB(210,110,42)

我想创建宏以在VariableValue列中更改行背景依赖于单元格值。

我现在有这样的代码:

Sub SetBackground()

Dim rngRange As Range
Dim rngRow As Range
Dim rgbCell As Range

Set rngRange = Range("A2:K13")
For Each rngRow In rngRange.Rows
    Set rgbCell = Range("E" & rngRow.Row) ' E it is column of VariableValue in my sheet
    rngRow.Interior.Color = rgbCell.Value 'here it doesn't works
Next

End Sub

我不知道如何从cell.value'运行'RGB函数。

来自rngRow.Interior.Color = rgbCell行的错误:

  

运行时错误'13':
  类型不匹配

2 个答案:

答案 0 :(得分:1)

RGB Function (Visual Basic)是一个VBA函数,可以从三个整数构建颜色常量。您不能通过传入看起来的文本字符串来使用它,就像完全形成的函数调用一样。

如果您绝对决定将公式作为单元格中的文本,那么从文本字符串中评估公式的一点操作就足够了。

Dim sRGB As String, r As Integer, g As Integer, b As Integer
sRGB = rgbCell.Value    'example: "RGB(210,110,42)"
r = Int(Split(Split(sRGB, ",")(0), "(")(1))
g = Int(Split(sRGB, ",")(1))
b = Int(Split(Split(sRGB, ",")(2), ")")(0))
'Debug.Print RGB(r, g, b)
rngRow.Interior.Color = RGB(r, g, b) 'here it works

答案 1 :(得分:0)

您必须将rngRow.Interior.Color设置为实际的颜色对象,但您当前正在将其设置为字符串。如果您在代码中更改此行:

rngRow.Interior.Color = rgbCell.Value 'here it doesn't works

对此:

If Left(rgbCell.Value, 4) = "RGB(" Then
    rgbValues = Split(Mid(rgbCell.Value, 5, Len(rgbCell.Value) - 5), ",")
    rngRow.Interior.Color = RGB(rgbValues(0), rgbValues(1), rgbValues(2))
End If

然后,这将根据字符串中的数字构建颜色对象。