VBA将RGB颜色存储在变量中

时间:2014-08-08 10:16:36

标签: vba excel-vba colors excel

我希望在Excel VBA项目中的变量中存储RGB颜色,用于设置整个子区域中各种单元格/范围的背景颜色。

我想在变量中设置一次颜色,这样如果我决定改变它,我只需要在一个地方进行。

但是我的尝试不起作用:

Dim clrBlue As ColorFormat
clrBlue = RGB(0, 0, 256)

Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue

使用上面的代码,我得到Object variable or With block variable not set运行时错误。

我觉得我在做一些根本错误的事情!任何人都可以建议它是什么?甚至可以这样做吗?

在写这篇文章时,我意识到我可以编写单独的函数(SetBlueSetRedSetGreen)来应用每种颜色,但这只会让人觉得麻烦。

3 个答案:

答案 0 :(得分:30)

RGB会返回Long,因此您需要将clrBlue声明为Long而不是ColorFormat

Dim clrBlue As Long

clrBlue = RGB(0, 0, 256)

Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue

答案 1 :(得分:8)

正如其他人所说,RGB()返回Long,因此您需要使用它而不是ColorFormat。在一个有点相关的说明中,我真的很喜欢C#中的Color enum,我开始在我的VBA模块中模仿它。您可以创建自己的枚举来存储项目中的颜色值,然后使用Color.Blue引用颜色。

如果您决定选择不同的蓝色,这也可以很容易地修改颜色。更新枚举,您使用Color.Blue的所有地方都将更新。

示例:

Public Enum Color
    Black = 0         'RGB(0, 0, 0)
    Blue = 14390640   'RGB(112, 149, 219)
    Gray = 11842740   'RGB(180, 180, 180)
    Red = 6118894     'RGB(238, 93, 93)
    White = 16777215  'RGB(255, 255, 255)
End Enum

要获取要存储的RGB值的long值,我只是将值放入Immediate窗口并复制输出。

在立即窗口中,键入:

? RGB(112, 149, 219)

输出将是14390640.可能有一种更简单的方法来获得该值。

答案 2 :(得分:1)

我没有尝试过这个,我也没有对以前的任何评论者提出异议。

我注意到原始代码示例包含:clrBlue = RGB(0,0, 256

RGB中允许的最高数字是255.这可能是问题所在。