Vba 将字符串转换为RGB()值的长字符串

Vba 将字符串转换为RGB()值的长字符串,vba,excel,rgb,Vba,Excel,Rgb,我正在编写一个宏,该宏识别单元格的RGB值,然后将其作为参数传递给条件格式。唯一的问题是使用以下方法: RGBcolor1 = "RGB(" & CInt("&H" & Right(HEXcolor1, 2)) & _ ", " & CInt("&H" & Mid(HEXcolor1, 3, 2)) & _ ", " & CInt("&H" & Left(HEXcolor1, 2)) & ")" 其

我正在编写一个宏,该宏识别单元格的RGB值,然后将其作为参数传递给条件格式。唯一的问题是使用以下方法:

RGBcolor1 = "RGB(" & CInt("&H" & Right(HEXcolor1, 2)) & _
", " & CInt("&H" & Mid(HEXcolor1, 3, 2)) & _
", " & CInt("&H" & Left(HEXcolor1, 2)) & ")"
其中:

HEXcolor1 = Right("000000" & Hex(Sheet1.[LowColour].Interior.Color), 6)
RGB值是一个字符串,而为了将其作为
.Color
传递,我需要它是一个长
(Color=RGB(255,0,0))

我知道存在建议使用调试窗口检索
?rgb(255,0,0)
的解决方案,但是,我希望自动化该过程。我尝试了
Clng()
以及
.Evaluate()
,但都不起作用


非常感谢您的帮助

可以使用val()函数对其进行转换


您必须解析字符串。您可以使用正则表达式,或者只是做一些简单的替换来隔离数字。例如:

strColor = "RGB(123, 0, 234)"
strColor = Replace(strColor, "RGB", "")
strColor = Replace(strColor,   "(", "")
strColor = Replace(strColor,   ")", "")
strColor = Replace(strColor,   " ", "")

Dim a As Variant, c As Long
a = Split(strColor, ",")
c = a(0) * &H10000 + a(1) * &H100 + a(2)

Range("A1").Interior.Color = c
或者,使用正则表达式(您必须添加对
Microsoft VBScript正则表达式5.5
库的引用):

编辑:

下面是一种快速但不太简单的方法,使用Microsoft脚本控件中的
Eval()

With CreateObject("MSScriptControl.ScriptControl")
    .Language = "VBScript"
    Range("A1").Interior.Color = .Eval(strColor)
End With

嘿,马修,谢谢你的建议!我两个都试过了,结果都是空的。使用手表,我可以看到RGBcolor1是一个字符串,值为“RGB(255,0,0)”。但是,如果我将RGBcolor1作为str传递,则l或CLng(Val(str))都返回0的值。我不完全确定为什么会发生这种情况,因为我希望该解决方案也能工作。您必须从字符串中获取实际值。从右边取下RGB(从左到右),然后使用拆分函数。为什么你要将长字符串转换为十六进制字符串,然后再转换回长字符串?只有当我将你的公式更改为c=a(0)+a(1)*&H100+a(2)*&H10000时,它才对我有效。你知道为什么吗?因为这篇评论是一年前写的,没有人评论,我想这是我的错误
strColor = "RGB(123, 0, 234)"
strColor = Replace(strColor, "RGB", "")
strColor = Replace(strColor,   "(", "")
strColor = Replace(strColor,   ")", "")
strColor = Replace(strColor,   " ", "")

Dim a As Variant, c As Long
a = Split(strColor, ",")
c = a(0) * &H10000 + a(1) * &H100 + a(2)

Range("A1").Interior.Color = c
With New RegExp
    .Global = True
    .Pattern = "[^\d,]"    ' Remove anything that's not a digit or comma
    Dim a As Variant, c As Long
    a = Split(.Replace(strColor, ""), ",")
    c = a(0) * &H10000 + a(1) * &H100 + a(2)
End If

Range("A1").Interior.Color = c
With CreateObject("MSScriptControl.ScriptControl")
    .Language = "VBScript"
    Range("A1").Interior.Color = .Eval(strColor)
End With