Excel 根据颜色常量的单元格值更改内部颜色
我有一个Excel范围,有8个颜色常数。我只想简单地根据单元格值更改相邻列中单元格的内部颜色。不幸的是,我得到了一个类型不匹配,这是因为它将值视为字符串,但我不知道如何将其转换为常量 例如,要将内饰颜色更改为蓝色,此操作有效 rng.interior.color=vbblue 但不是这个 rng.interior.color=rng.value',因为它是字符串“vbblue” 如何将rng.value从字符串转换为颜色常量,以便列E中的范围基于列D中的值获得背景色 没有“内置”方法将Excel 根据颜色常量的单元格值更改内部颜色,excel,vba,Excel,Vba,我有一个Excel范围,有8个颜色常数。我只想简单地根据单元格值更改相邻列中单元格的内部颜色。不幸的是,我得到了一个类型不匹配,这是因为它将值视为字符串,但我不知道如何将其转换为常量 例如,要将内饰颜色更改为蓝色,此操作有效 rng.interior.color=vbblue 但不是这个 rng.interior.color=rng.value',因为它是字符串“vbblue” 如何将rng.value从字符串转换为颜色常量,以便列E中的范围基于列D中的值获得背景色 没有“内置”方法将常量的名
常量的名称转换为其值。您需要自己进行映射。最好是使用字典:
Function TextToColor(s As String) As Long
Static dict As Dictionary
If dict Is Nothing Then
Set dict = CreateObject("Scripting.Dictionary")
dict("vbBlack") = vbBlack
dict("vbWhite") = vbWhite
dict("vbRed") = vbRed
dict("vbGreen") = vbGreen
dict("vbBlue") = vbBlue
dict("vbYellow") = vbYellow
dict("vbMagenta") = vbMagenta
dict("vbCyan") = vbCyan
' dict("etc...") = etc...
End If
TextToColor = dict(s)
End Function
您可以直接用ColorIndex来代替。因此,如果单元格显示5或相关颜色索引号,则无需更改代码,只需更改此行:
rng.Offset(,1).Interior.ColorIndex=rng.Value我曾考虑使用select case语句,但希望确保没有遗漏任何内容。既然你确认它必须被映射,那么我可以选择你的答案。但有一个问题是,为什么函数类型设置为long?谢谢。@AshtonMorgan,因为这些常量的类型是long,虽然内部有3个字节编码红色、绿色和蓝色的强度。这就是为什么RGB
函数返回long
。
Function TextToColor(s As String) As Long
Static dict As Dictionary
If dict Is Nothing Then
Set dict = CreateObject("Scripting.Dictionary")
dict("vbBlack") = vbBlack
dict("vbWhite") = vbWhite
dict("vbRed") = vbRed
dict("vbGreen") = vbGreen
dict("vbBlue") = vbBlue
dict("vbYellow") = vbYellow
dict("vbMagenta") = vbMagenta
dict("vbCyan") = vbCyan
' dict("etc...") = etc...
End If
TextToColor = dict(s)
End Function
Sub ExampleUse()
Dim colorRange As Range: Set colorRange = Range("D1", Range("D1").End(xlDown).Address)
Dim rng As Range
For Each rng In colorRange
rng.Offset(, 1).Interior.Color = TextToColor(rng.value)
Next rng
End Sub