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

Excel:将单元格的背景色更改为写入该单元格的RGB颜色,excel,excel-2010,vba,Excel,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.Hex2

我有一段代码显示目标单元格的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,将改变其自身细胞的背景色。也许有人知道怎么做吗?

由于不能使用名为UDF的函数设置单元格的颜色,因此需要使用sub

非常简单的例子:

Function CopyColor(RefCell As Range, DestCell As Range)
    DestCell.Interior.Color  = RefCell.Interior.Color
End Function
警察说

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

不幸的是,这是不正确的

您可以更改调用公式的单元格的颜色。这里有一个例子。这将从调用公式的位置将单元格颜色更改为红色

诀窍是将一个空白值作为第一个参数传递给sub(
a
,在下面的例子中)

它为什么起作用?

我不知道!但它是有效的:)

编辑

跟进和聊天(以下评论)

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


注意:我没有做任何错误处理。我相信你会处理好的。

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

用作自定义项的函数不能修改它所在的工作表,也不能修改工作簿中的任何内容:它只能返回一个值@TimWilliams,那么也许你们知道读取rgb代码并将其应用于其他单元格的最佳方式是什么?是的,你们会使用sub。你们能解释一下它必须输入的位置吗?当Vba转到alt+f11时,这一个在哪里?@SiddharthRout是这个巫毒?@SiddharthRout,谢谢你的尝试。仍然无法让它工作。。。总是得到#价值error@SiddharthRout巫术?@ArnoldasM:我希望你是在模块中粘贴代码?我刚刚发布了一个工作示例的屏幕截图。@ArnoldasM:我还附上了一个示例。你可以从上面的答案下载。您可能需要刷新页面才能看到它
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
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
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