繁体   English   中英

从单元格读取颜色以为图表着色

[英]Read colour from cell to colour a chart excel

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

?rgb(170,50,62)

这导致

4076202

在vba代码中,我使用以下命令读取颜色

ser.Points(p).Interior.Color = arr(s, p)

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

我是否可以为每个单元格设置一个函数,在其中输入诸如4F9F92之类的值以将其自动转换为格式4076202,以便该makro可以读取它?

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

1) RGB函数接受红色,绿色,蓝色分量,它们是0-255范围内的Decimal numbers ,可以从十六进制值中去除

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

并按如下所示在宏中使用它,假定Cell A1AA323E

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

如果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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM