Excel:将单元格的背景色更改为写入该单元格的RGB颜色
我有一段代码显示目标单元格的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
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