【问题标题】:How to store RGB colour in variable?如何将RGB颜色存储在变量中?
【发布时间】:2014-10-01 19:06:30
【问题描述】:

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

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

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

Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue

使用上面的代码,我得到了运行时错误:

对象变量或未设置块变量

我可以编写单独的函数(SetBlueSetRedSetGreen)来应用每种颜色,但感觉很乱。

谁能建议我做错了什么?

【问题讨论】:

  • 尝试使用dim clrBlue as Long 而不是colorFormat
  • 谢谢,我刚刚通过这篇文章 (stackoverflow.com/a/1427293/1448678) 找到了相同的内容 - 虽然不是完全重复。如果您作为答案发布,我会接受!
  • 我可以编写单独的函数(SetBlue、SetRed、SetGreen)来应用每种颜色”基本上替换一行代码的函数通常没有用。
  • ^ 是的,我同意。正如我所说:“混乱”!

标签: excel vba colors


【解决方案1】:

RGB 返回一个Long,因此您需要将clrBlue 声明为Long 而不是ColorFormat

Dim clrBlue As Long

clrBlue = RGB(0, 0, 255)

Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue

【讨论】:

  • 我认为,当您为您的意图添加一些解释时,这对 OP 和更多访问者会更有帮助。
  • @reporter:他在对上述问题的评论中写下了解释......我会将其合并到答案中。
【解决方案2】:

正如其他人所说,RGB() 返回一个 Long,因此您需要使用它而不是 ColorFormat。在一些相关的说明中,我真的很喜欢 C# 中的 Color 枚举,并且我开始在我的 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 值,我只是将值放入即时窗口并复制输出。

在即时窗口中,输入:

? RGB(112, 149, 219)

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

【讨论】:

    【解决方案3】:

    我没有尝试过这个,我也没有对之前的任何评论者提出异议。

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

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

    【讨论】:

    • 255 是最高有效值,任何更高的值都将假定为 255。换句话说,RGB(0, 0, 256) 将返回与 RGB(0, 0, 255) 不会引发错误。
    猜你喜欢
    • 1970-01-01
    • 2017-08-12
    • 2014-06-21
    • 2023-01-19
    • 1970-01-01
    • 2013-07-03
    • 2020-06-09
    • 1970-01-01
    • 2022-07-11
    相关资源
    最近更新 更多