在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可以读取它?
答案 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