如何在变量中存储RGB颜色



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

我想在一个变量中设置一次颜色,所以如果我决定改变它,我只需要在一个地方做。

Dim clrBlue As ColorFormat
clrBlue = RGB(0, 0, 256)
Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue
使用上面的代码,我得到运行时错误:

Object变量或With块变量未设置

我可以写单独的函数(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#中的Color枚举,我开始在我的VBA模块中模仿它。您可以创建自己的枚举来存储项目中颜色的值,然后使用color . blue引用颜色。

这也使得修改颜色非常容易,如果你决定使用不同深浅的蓝色。更新枚举,以及所有使用过Color的地方。蓝色会更新

的例子:

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值的长值,我只是将该值放入Immediate窗口并复制输出。

在即时窗口中输入:

? RGB(112, 149, 219)

输出将是14390640。可能有更简单的方法来获取该值

我还没有尝试过,我也不是在质疑之前的任何评论。

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

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

最新更新