从单元格中读取颜色,使图表优异

时间:2014-08-04 14:28:09

标签: excel vba rgb

在vba中,我想从工作表中的单元格中读取颜色,以在条形图中为特定条形图着色。我的问题是我有4F9F92格式的颜色,但要在makro中读取它我需要使用来自单元格的excel颜色代码4076202。有没有办法在vba代码中转换两种格式......?我知道在即时窗口我可以做到

?rgb(170,50,62)

导致

4076202

在vba代码中,我使用以下命令

读取颜色
ser.Points(p).Interior.Color = arr(s, p)

其中s和p是通过具有不同颜色代码的数组运行的两个runnign变量。

有没有机会我可以为每个单元格设置一个函数,我输入一个值,如4F9F92,将其自动转换为格式4076202,以便makro可以读取它?

2 个答案:

答案 0 :(得分:0)

实际上rgb(170,50,62)的十六进制等效值是AA323E,它转换为4076202的长值

1)RGB Function接收红色,绿色,蓝色组件,其中Decimal numbers的范围为0-255,可以从HEX值中删除

2)将这些剥离的值传递给RGB function以获得表示RGB颜色值的Long whole number

Function Hex2RGB(hex As String) As String

    Red = Val("&H" & Mid(hex, 1, 2))
    Green = Val("&H" & Mid(hex, 3, 2))
    Blue = Val("&H" & Mid(hex, 5, 2))

  Debug.Print RGB(Red, Green, Blue)
    Hex2RGB = RGB(Red, Green, Blue)

End Function

按照以下方式在宏中使用它,假设AA323E中有Cell A1

Sub ColorMe()
Range("B1").Interior.Color = Hex2RGB(Range("A1"))
End Sub

答案 1 :(得分:0)

如果c是其中包含十六进制颜色代码的单元格,则为#FFFFFF

形式

excel中的以下vba可以直接将其转换为RGB

RGB(Application.WorksheetFunction.Hex2Dec(Mid(c.Value, 2, 2)), Application.WorksheetFunction.Hex2Dec(Mid(c.Value, 4, 2)), Application.WorksheetFunction.Hex2Dec(Mid(c.Value, 6, 2)))

我使用工作表函数Hex2Dec,将十六进制代码的3个组成部分转换为十进制,并使用RGB函数返回您可以使用的long / rgb颜色代码。

更新 - 示例用法:

Sub ColorSwatch()
   Dim c As Range
   for each c in selection
        c.Interior.Color = RGB(Application.WorksheetFunction.Hex2Dec(Mid(c.Value, 2, 2)), Application.WorksheetFunction.Hex2Dec(Mid(c.Value, 4, 2)), Application.WorksheetFunction.Hex2Dec(Mid(c.Value, 6, 2)))
   next
End Sub