Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 根据颜色常量的单元格值更改内部颜色_Excel_Vba - Fatal编程技术网

Excel 根据颜色常量的单元格值更改内部颜色

Excel 根据颜色常量的单元格值更改内部颜色,excel,vba,Excel,Vba,我有一个Excel范围,有8个颜色常数。我只想简单地根据单元格值更改相邻列中单元格的内部颜色。不幸的是,我得到了一个类型不匹配,这是因为它将值视为字符串,但我不知道如何将其转换为常量 例如,要将内饰颜色更改为蓝色,此操作有效 rng.interior.color=vbblue 但不是这个 rng.interior.color=rng.value',因为它是字符串“vbblue” 如何将rng.value从字符串转换为颜色常量,以便列E中的范围基于列D中的值获得背景色 没有“内置”方法将常量的名

我有一个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