Excel 如何在变量中存储RGB颜色?
我希望在Excel VBA项目中的变量中存储RGB颜色,以设置整个子对象中各个单元格/区域的背景颜色 我想在一个变量中设置一次颜色,所以如果我决定在整个过程中更改它,我只需要在一个地方进行更改Excel 如何在变量中存储RGB颜色?,excel,vba,colors,Excel,Vba,Colors,我希望在Excel VBA项目中的变量中存储RGB颜色,以设置整个子对象中各个单元格/区域的背景颜色 我想在一个变量中设置一次颜色,所以如果我决定在整个过程中更改它,我只需要在一个地方进行更改 Dim clrBlue As ColorFormat clrBlue = RGB(0, 0, 256) Range("a2").Interior.Color = clrBlue Range("b3").Interior.Color = clrBlue 使用上述代码,我得到运行时错误: 对象变量或未设置
Dim clrBlue As ColorFormat
clrBlue = RGB(0, 0, 256)
Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue
使用上述代码,我得到运行时错误:
对象变量或未设置块变量
我可以编写单独的函数(SetBlue
,SetRed
,SetGreen
)来应用每种颜色,但感觉很凌乱
有人能指出我做错了什么吗?
RGB
返回一个Long
,因此您需要将clrBlue
声明为Long
,而不是ColorFormat
Dim clrBlue As Long
clrBlue = RGB(0, 0, 255)
Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
正如其他人所说,RGB()返回一个Long,因此您需要使用它而不是ColorFormat。另一方面,我非常喜欢C#中的颜色枚举,我开始在VBA模块中模仿它。您可以创建自己的枚举来存储项目中的颜色值,然后使用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值的长值,我只是将该值扔进即时窗口并复制输出
在即时窗口中,键入:
? RGB(112, 149, 219)
输出为14390640。可能有一种更简单的方法来获取值。我还没有尝试过这个方法,也没有对之前的任何评论提出异议 我注意到原始代码示例有:clrBlue=RGB(0,0,256)
RGB中允许的最大数字为255。这可能就是问题所在。试着使用
dim clrbue作为Long
而不是colorFormat
谢谢,我刚刚通过这篇文章()找到了相同的方法-虽然不是完全重复。如果你发帖子作为回答,我会接受!“我可以编写单独的函数(SetBlue、SetRed、SetGreen)来应用每种颜色”基本上替换一行代码的函数通常没有用处。^是的,我同意。就像我说的:“凌乱”!我认为,如果你能对你的意图做一些解释,对OP和更多的参观者会更有帮助。@记者:他在对上述问题的评论中写下了解释。。。我将把它合并到答案中。255是最高有效值,任何较高的值都将假定为255。换句话说,RGB(0,0,256)将返回与RGB(0,0,255)相同的值,而不会引发错误。