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