字體:小 中 大 | |
|
|
2018/06/16 22:17:26瀏覽15839|回應1|推薦1 | |
在另一篇文章裡談到 Excel 只能使用 57 色(*註),這57色在它裡面有編號,從 0-56號,Excel VBA 裡也用 RGB 三原色的組成值來表示色彩。這裡我就寫一個小程序來展示如何在 Excel VBA 裡使用ColorIndex (色號) 及Color (色彩RGB值)。 把底下這個Demo57Colors()程序放在一個空白工作表的程式碼區,然後執行它,它就會在那張工作表建立一個表格,第1列是表頭,第2至第58列就是色號0至57的實際呈現 (如圖片) A 欄:呈現該色彩用於儲存格底色 (interior) B 欄:呈現該色彩用於儲存格裡的文字 (font) C 欄:以十六進位數字表示該顏色的三原色值 (依 BBGGRR 和 RRGGBB 兩種順序並列) D、E、F 欄:以十進位數字分別表示該顏色的 R、G、B 值 G 欄:該列的色號 (ColorIndex)
由於 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 修訂程式碼,感謝吳國棟君不吝指正。 |
|
( 知識學習|其他 ) |