Excel:将单元格的背景颜色更改为在该单元格中写入的RGB颜色

时间:2015-07-30 06:28:04

标签: excel excel-vba excel-2010 vba

我有这个代码显示目标细胞的rgb颜色:

Function getRGB(RefCell)
Dim mystr As String
Application.Volatile
    mystr = Right("000000" & Hex(RefCell.Interior.Color), 6)
    getRGB = Application.Hex2Dec(Right(mystr, 2)) & ", " & _
             Application.Hex2Dec(Mid(mystr, 3, 2)) & ", " & _
             Application.Hex2Dec(Left(mystr, 2))
End Function

我需要这个代码而不是炫耀其他单元格的rgb,会改变自己单元格的背景颜色。也许有人知道该怎么做?

3 个答案:

答案 0 :(得分:5)

MSDN KB

  

工作表单元格中的公式调用的用户定义函数无法更改Microsoft Excel的环境。这意味着这样的功能不能执行以下任何操作:   在电子表格中插入,删除或格式化单元格。

不幸的是不正确 !!!

您可以更改调用公式的单元格的颜色。这是一个例子。这会将单元格的颜色更改为调用公式的Red

诀窍是将空白值作为第一个参数(a传递给sub。)

为什么会有效?

我不知道!但它有效:)

Function SetIt(RefCell)
    RefCell.Parent.Evaluate "getRGB(" & """""" & "," & RefCell.Address(False, False) & ")"

    SetIt = ""
End Function

Sub getRGB(a As String, RefCell As Range)
    RefCell.Interior.ColorIndex = 3 '<~~ Change color to red
End Sub

<强>截图

enter image description here

编辑(信用到期):很久以前我曾见过蒂姆·威廉姆斯的this帖子,我已经尝试过它并且我已经完成了很多其他的知识说是不可能的。

BTW我用它玩得更多,我能够在没有传递空白字符串的情况下使其工作。

Function SetIt(RefCell)
    RefCell.Parent.Evaluate "getRGB(" & RefCell.Address(False, False) & ")" 
    SetIt = ""
End Function

Sub getRGB(RefCell As Range)
    RefCell.Interior.ColorIndex = 3
End Sub

修改

Duplicate question的跟进和聊天(评论下方)

将其粘贴到代码模块中,然后在单元格P20中粘贴公式=setit(P20,N20)

Function SetIt(DestCell As Range, RefCell As Range)
    RefCell.Parent.Evaluate "SetAndGetRGB(" & RefCell.Address(False, False) & _
                                        "," & _
                                        DestCell.Address(False, False) & ")"

    SetIt = ""
End Function

Sub SetAndGetRGB(RefCell As Range, DestCell As Range)
    Dim sRGB As String
    Dim shName As String

    shName = Split(RefCell.Value, "!")(0)
    sRange = Split(RefCell.Value, "!")(1)

    sRGB = Right("000000" & Hex(Sheets(shName).Range(sRange).Interior.Color), 6)

    DestCell.Interior.Color = RGB( _
                                    Application.Hex2Dec(Right(sRGB, 2)), _
                                    Application.Hex2Dec(Mid(sRGB, 3, 2)), _
                                    Application.Hex2Dec(Left(sRGB, 2)) _
                                  )
End Sub

enter image description here

注意:我没有做任何错误处理。我相信你可以照顾到这一点。

答案 1 :(得分:0)

由于您无法使用称为UDF的函数设置单元格的颜色,因此您需要使用sub。

非常简单的例子:

setTimeout(function(){}, 1000)

答案 2 :(得分:0)

Siddharth的解决方案看起来不错。 如果您希望在不输入公式的情况下在整个工作表中使用此功能,请将此代码放在其VBA页面上。它会在每次内容更改时检查单元格中的更改,如果内容对应于颜色格式,您可以使用它来更改颜色:

Private Sub Worksheet_Change(ByVal Target As Range)

' Test if a cell contains the proper formatting
' If it does, assign color
Target.Interior.ColorIndex = Target.Value

End Sub