我希望在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
运行时错误。
我觉得我在做一些根本错误的事情!任何人都可以建议它是什么?甚至可以这样做吗?
在写这篇文章时,我意识到我可以编写单独的函数(SetBlue
,SetRed
,SetGreen
)来应用每种颜色,但这只会让人觉得麻烦。
答案 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.这可能是问题所在。