VBA研究关于单元格颜色值的十六进制赋值
Posted 宋哥
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA研究关于单元格颜色值的十六进制赋值相关的知识,希望对你有一定的参考价值。
作者:iamlaosong
1、单元格颜色的设置
背景颜色用属性Interior,字体颜色用属性Font。颜色的值,可以用Colorindex,这种方法只有Excel规定的56中颜色,如下图所示:
也可以用RGB()函数,这样就可以设置成任何颜色。RGB()函数函数实际是返回一个颜色值,因此,也可以直接赋值,只是这个值不直观而已。其实这个值就是RGB()函数的值,用十进制表示:
RGB(R,G,B)=B*256*256+G*256+R
其中R、G、B是红绿蓝三种颜色十进制值。
用十六进制表示颜色值就非常直观了,最低两位表示红色,最高两位表示蓝色,中间两位表示绿色,就是上图表格中十六进制值,只是红蓝调换一下位置,即:
&HBBGGRR,其中RR、GG、BB是红绿蓝三种颜色十六进制值。
如红色(ColorIndex=3)即RGB(255,0,0)可以用16进制数表示为&H0000FF
2、颜色设置方法
改变单元格的背景色用: range.Interior.ColorIndex=
改变单元格的字体的颜色: range.font.ColorIndex=
3、颜色设置代码和效果
'设置单元格背景颜色
Sub setColor()
'黑色
Range("A1") = "黑色"
Range("A2").Interior.ColorIndex = 1
Range("A3").Interior.Color = RGB(0, 0, 0)
Range("A4").Interior.Color = 0
Range("A5").Interior.Color = &H0
'红色
Range("B1") = "红色"
Range("B2").Interior.ColorIndex = 3
Range("B3").Interior.Color = RGB(255, 0, 0)
Range("B4").Interior.Color = 255
Range("B5").Interior.Color = &HFF
'绿色
Range("C1") = "绿色"
Range("C2").Interior.ColorIndex = 4
Range("C3").Interior.Color = RGB(0, 255, 0)
Range("C4").Interior.Color = 65280 '255*256=65280
Range("C5").Interior.Color = &HFF00
'蓝色
Range("D1") = "蓝色"
Range("D2").Interior.ColorIndex = 5
Range("D3").Interior.Color = RGB(0, 0, 255)
Range("D4").Interior.Color = 16711680 '255*256*256=16711680
Range("D5").Interior.Color = &HFF0000
End Sub
这个C5单元格颜色有点奇怪,明明设置的是绿色(用十六进制值&HFF00) ,结果却是这个颜色。设置完毕,再测试这个单元格的颜色值,居然是8号颜色,十六进制值&HFFFF00,如下图:
这是什么情况?难道16进制表示有什么问题吗?将该语句换成:
Range("C5").Interior.Color = &HFFFF00
效果完全相同。
之所以这样,应该和十六进制数据转换有关系,&HFF00被系统认为是负数(-256),按补码规则,扩充位数(16bit到24bit)时高位补1,我试了一下用&HFFFF赋值,结果是白色,和&HFFFFFF完全相同。我想用&H00FF00赋值,但是开发环境立即优化,去掉前面的00,看来用十六进制表示颜色值是不保险的(十进制没有问题但不直观),还是用RGB()函数吧。
那么有没有解决办法呢?办法还是有的,既然开发环境会优化掉数字前面的00,那么只要不写00就行了,所以,只要将语句改成下面的形式就行了(后6位是颜色值):
Range("C5").Interior.Color = &H100FF00 - &H1000000
VBA没有无符号整数,所以用VBA处理无符号整数(比如移位),会碰到与上面类似的问题,这一点要注意。真要处理,就用Byte类型吧。
以上是关于VBA研究关于单元格颜色值的十六进制赋值的主要内容,如果未能解决你的问题,请参考以下文章
Excel VBA自动创建sheet,设置字体,单元格颜色和边框