把底下這個Demo57Colors()程序放在一個空白工作表的程式碼區,然後執行它,它就會在那張工作表建立一個表格,第1列是表頭,第2至第58列就是色號0至57的實際呈現 (如圖片)
A 欄:呈現該色彩用於儲存格底色 (interior)
B 欄:呈現該色彩用於儲存格裡的文字 (font)
C 欄:以十六進位數字表示該顏色的三原色值 (依 BBGGRR 和 RRGGBB 兩種順序並列)
D、E、F 欄:以十進位數字分別表示該顏色的 R、G、B 值
G 欄:該列的色號 (ColorIndex)
在程式裡,你會看到 "Cells(row, column).Interior.ColorIndex = ?" 的句子指定儲存格底色,用 "Cells(row, column).Font.ColorIndex = ?" 的句子指定儲存格文字的顏色,然後,用 "Cells(row, column).Interior.Color" 取出 指定儲存格底色的 Color 屬性,也就是它的 RGB 值,把這個數值轉成 16 進位。由於 RGB 值會是 6 個十六進位數位 (Hexdecimal Digits) 所組成,所以用 Hex() 函數將此值轉成 6 個十六進位數位做成一個字串。(你會看到我在程式註解裡說 6 nibbles,因為每個 Hexdecimal Digits 是用 4 個 bits 儲存,4 bits 就是半個 byte,稱為 nibble)
由於 Color 屬性 RGB 值的實際儲存順序為 "BBGGRR",我在程式裡特別重組一個順序為 "RRGGBB" 的字串,然後把兩個自串連起來放入 C 欄。
我想要在 C、D、E 三個欄位裡分別顯示出 R、G、B 的十進位值,但是 VBA 裡面沒有把十六進位轉成十進位的函數,於是我利用儲存格公式的HEX2DEC()函數,在VBA程式裡組成像 =HEX2DEC("FF") 這樣的公式字串,然後把這字串填入儲存格。
但是,當公式字串填入的一瞬間,如果 (萬一) 字串尚未完全填入,Excel 的公式解譯器就開始解譯公式,它就會認為公式錯誤。因此在程式的開頭就有一句:Application.Calculation = xlCalculationManual,就是讓 Excel 暫時停止執行所有儲存格裡的公式。當所有儲存格裡的公式都填入了,再用這一句Application.Calculation = xlCalculationAutomatic,讓 Excel 可以執行儲存格裡的公式。
Sub Demo57Colors()
Coder: Way Cheng
展示活頁簿裡 0 to 56 號色彩共 57 色的實際使用
Application.ScreenUpdating = False 暫時停止螢幕更新
Application.Calculation = xlCalculationManual 暫時停止自訂公式的執行
Dim i As Long
Dim strBGR As String, strRGB As String
Cells(1, 1) = "底色"
Cells(1, 2) = "文字"
Cells(1, 3) = "#BBGGRR#RRGGBB"
Cells(1, 4) = "R(10)"
Cells(1, 5) = "G(10)"
Cells(1, 6) = "B(10)"
Cells(1, 7) = "色號"
For i = 0 To 56
Cells(i + 2, 1).Interior.ColorIndex = i A欄:背景底色設為 i 號色彩
Cells(i + 2, 1).Value = "[Color " & i & "]" A欄: 填入文字 (色號)
Cells(i + 2, 2).Font.ColorIndex = i B欄: 文字色彩設為 i 號色彩
Cells(i + 2, 2).Value = "[Color " & i & "]" A欄: 填入文字 (色號)
strBGR = Right("000000" & Hex(Cells(i + 2, 1).Interior.Color), 6) 取A欄底色值 6 nibbles為 "BBGGRR"
strRGB = Right(strBGR, 2) & Mid(strBGR, 3, 2) & Left(strBGR, 2) 然後轉成 "RRGGBB" (strRGB)
Cells(i + 2, 3) = "#" & strBGR & "#" & strRGB & "" C欄: 以16進位顯示 GBR 與 RGB
Cells(i + 2, 4).Formula = "=Hex2dec(""" & Right(strBGR, 2) & """)" D欄: Red 值以十進位顯示
Cells(i + 2, 5).Formula = "=Hex2dec(""" & Mid(strBGR, 3, 2) & """)" E欄: Green 值以十進位顯示
Cells(i + 2, 6).Formula = "=Hex2dec(""" & Left(strBGR, 2) & """)" F欄: Blue 值以十進位顯示
Cells(i + 2, 7) = "[色彩 " & i & "]" G欄: 儲存格自訂格式時可以這樣寫
Next i
done:
Application.Calculation = xlCalculationAutomatic 公式恢復執行
Application.ScreenUpdating = True 螢幕恢復更新
End Sub
※2019/8/21 修訂程式碼,感謝吳國棟君不吝指正。