作者: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、颜色设置代码和效果
Range("A2").Interior.ColorIndex = 1 Range("A3").Interior.Color = RGB(0, 0, 0) Range("A4").Interior.Color = 0 Range("A5").Interior.Color = &H0 Range("B2").Interior.ColorIndex = 3 Range("B3").Interior.Color = RGB(255, 0, 0) Range("B4").Interior.Color = 255 Range("B5").Interior.Color = &HFF 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("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

这个C5单元格颜色有点奇怪,明明设置的是绿色(用十六进制值&HFF00) ,结果却是这个颜色。设置完毕,再测试这个单元格的颜色值,居然是8号颜色,十六进制值&HFFFF00,如下图:

这是什么情况?难道16进制表示有什么问题吗?将该语句换成:
Range("C5").Interior.Color = &HFFFF00
效果完全相同。
之所以这样,应该和十六进制数据转换有关系,&HFF00被系统认为是整型(整型数据范围: -32768 ~ 32767,16bit),但是为负数(-256),按补码规则,扩充到长整型时(长整型数据范围:-2147483648 ~ 2147483647,32bit)时高位补1,我试了一下用&HFFFF赋值,结果是白色,和&HFFFFFF完全相同。我想用&H00FF00赋值,但是开发环境立即优化,去掉前面的00,看来用十六进制表示颜色值是不保险的(十进制没有问题但不直观),还是用RGB()函数吧。
那么有没有解决办法呢?办法还是有的,既然开发环境会优化掉数字前面的00,那么只要不写00就行了,所以,只要将语句改成下面的形式就行了(后6位是颜色值):
Range("C5").Interior.Color = &H100FF00 - &H1000000
进一步研究发现,后面的H1000000减不减效果是一样的,也就是说,颜色赋值,只关心后面的24bit,高位是什么内容,没有关系。
VBA没有无符号整数,所以用VBA处理无符号整数(比如移位),会碰到与上面类似的问题,这一点要注意。真要处理,就用Byte类型吧。
最后,完整的看下效果吧。为了统一并防止出错,十六进制值都用CC开头,后跟6位颜色代码(用什么十六进制数开头都可以,只要不是0就行,用CC是因为颜色的英文是C开头)。代码如下:
Range("A2").Interior.ColorIndex = 1 Range("A3").Interior.Color = RGB(0, 0, 0) Range("A4").Interior.Color = 0 Range("A5").Interior.Color = &HCC000000 Range("B2").Interior.ColorIndex = 3 Range("B3").Interior.Color = RGB(255, 0, 0) Range("B4").Interior.Color = 255 Range("B5").Interior.Color = &HCC0000FF Range("C2").Interior.ColorIndex = 4 Range("C3").Interior.Color = RGB(0, 255, 0) Range("C4").Interior.Color = 65280 '255*256 Range("C5").Interior.Color = &HCC00FF00 Range("D2").Interior.ColorIndex = 5 Range("D3").Interior.Color = RGB(0, 0, 255) Range("D4").Interior.Color = 16711680 '255*256*256 Range("D5").Interior.Color = &HCCFF0000 Range("E2").Interior.ColorIndex = 6 Range("E3").Interior.Color = RGB(255, 255, 0) Range("E4").Interior.Color = 65535 '255*256+255 Range("E5").Interior.Color = &HCC00FFFF Range("F2").Interior.ColorIndex = 44 Range("F3").Interior.Color = RGB(255, 204, 0) Range("F4").Interior.Color = 52479 '204*256+255 Range("F5").Interior.Color = &HCC00CCFF

|