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/17.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 如何在变量中存储RGB颜色?_Excel_Vba_Colors - Fatal编程技术网

Excel 如何在变量中存储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 使用上述代码,我得到运行时错误: 对象变量或未设置

我希望在Excel VBA项目中的变量中存储RGB颜色,以设置整个子对象中各个单元格/区域的背景颜色

我想在一个变量中设置一次颜色,所以如果我决定在整个过程中更改它,我只需要在一个地方进行更改

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)相同的值,而不会引发错误。