作者:iamlaosong 1、單元格顏色的設(shè)置 背景顏色用屬性Interior,字體顏色用屬性Font。顏色的值,可以用Colorindex,這種方法只有Excel規(guī)定的56中顏色,如下圖所示: 也可以用RGB()函數(shù),這樣就可以設(shè)置成任何顏色。RGB()函數(shù)函數(shù)實際是返回一個顏色值,因此,也可以直接賦值,只是這個值不直觀而已。其實這個值就是RGB()函數(shù)的值,用十進制表示: RGB(R,G,B)=B*256*256+G*256+R 其中R、G、B是紅綠藍三種顏色十進制值。 用十六進制表示顏色值就非常直觀了,最低兩位表示紅色,最高兩位表示藍色,中間兩位表示綠色,就是上圖表格中十六進制值,只是紅藍調(diào)換一下位置,即: &HBBGGRR,其中RR、GG、BB是紅綠藍三種顏色十六進制值。 如紅色(ColorIndex=3)即RGB(255,0,0)可以用16進制數(shù)表示為&H0000FF 2、顏色設(shè)置方法 改變單元格的背景色用: range.Interior.ColorIndex= 3、顏色設(shè)置代碼和效果
這個C5單元格顏色有點奇怪,明明設(shè)置的是綠色(用十六進制值&HFF00) ,結(jié)果卻是這個顏色。設(shè)置完畢,再測試這個單元格的顏色值,居然是8號顏色,十六進制值&HFFFF00,如下圖: 這是什么情況?難道16進制表示有什么問題嗎?將該語句換成: Range("C5").Interior.Color = &HFFFF00 效果完全相同。 之所以這樣,應(yīng)該和十六進制數(shù)據(jù)轉(zhuǎn)換有關(guān)系,&HFF00被系統(tǒng)認(rèn)為是整型(整型數(shù)據(jù)范圍: -32768 ~ 32767,16bit),但是為負數(shù)(-256),按補碼規(guī)則,擴充到長整型時(長整型數(shù)據(jù)范圍:-2147483648 ~ 2147483647,32bit)時高位補1,我試了一下用&HFFFF賦值,結(jié)果是白色,和&HFFFFFF完全相同。我想用&H00FF00賦值,但是開發(fā)環(huán)境立即優(yōu)化,去掉前面的00,看來用十六進制表示顏色值是不保險的(十進制沒有問題但不直觀),還是用RGB()函數(shù)吧。 那么有沒有解決辦法呢?辦法還是有的,既然開發(fā)環(huán)境會優(yōu)化掉數(shù)字前面的00,那么只要不寫00就行了,所以,只要將語句改成下面的形式就行了(后6位是顏色值): Range("C5").Interior.Color = &H100FF00 - &H1000000 進一步研究發(fā)現(xiàn),后面的H1000000減不減效果是一樣的,也就是說,顏色賦值,只關(guān)心后面的24bit,高位是什么內(nèi)容,沒有關(guān)系。 VBA沒有無符號整數(shù),所以用VBA處理無符號整數(shù)(比如移位),會碰到與上面類似的問題,這一點要注意。真要處理,就用Byte類型吧。 最后,完整的看下效果吧。為了統(tǒng)一并防止出錯,十六進制值都用CC開頭,后跟6位顏色代碼(用什么十六進制數(shù)開頭都可以,只要不是0就行,用CC是因為顏色的英文是C開頭)。代碼如下:
|
|
來自: 株野 > 《VBAEditor》