我有这个代码显示目标细胞的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,会改变自己单元格的背景颜色。也许有人知道该怎么做?
答案 0 :(得分:5)
工作表单元格中的公式调用的用户定义函数无法更改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
<强>截图强>
编辑(信用到期):很久以前我曾见过蒂姆·威廉姆斯的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
注意:我没有做任何错误处理。我相信你可以照顾到这一点。
答案 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