VBA将RGB颜色存储在变量中

Jon*_*nny 14 excel vba colors excel-vba

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

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

但是我的下面的尝试不起作用:

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

Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue
Run Code Online (Sandbox Code Playgroud)

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

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

在写这个我知道我可以写不同的功能(SetBlue,SetRed,SetGreen)申请每种颜色,但是这只是感觉凌乱.

Tom*_*Tom 33

RGB返回一个Long,所以你需要声明clrBlueLong,而不是作为ColorFormat.

Dim clrBlue As Long

clrBlue = RGB(0, 0, 255)

Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
Run Code Online (Sandbox Code Playgroud)

  • @记者:他在上面问题的评论中写了解释……我将其合并为答案。 (2认同)

Eri*_*lan 10

正如其他人所说,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
Run Code Online (Sandbox Code Playgroud)

要获取要存储的RGB值的长值,我只是将值放入立即窗口并复制输出.

在立即窗口中,键入:

? RGB(112, 149, 219)
Run Code Online (Sandbox Code Playgroud)

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