我想將單元格的字體顏色設置爲特定的RGB值。在VBA中設置字體顏色
如果我使用
ActiveCell.Color = RGB(255,255,0)
我得到黃色,但如果我用一個更奇特的RGB值,如:
ActiveCell.Color = RGB(178, 150, 109)
我只是得到一個灰色回來。
爲什麼我不能使用任何RGB值?你知道任何解決方法嗎?
謝謝。
我想將單元格的字體顏色設置爲特定的RGB值。在VBA中設置字體顏色
如果我使用
ActiveCell.Color = RGB(255,255,0)
我得到黃色,但如果我用一個更奇特的RGB值,如:
ActiveCell.Color = RGB(178, 150, 109)
我只是得到一個灰色回來。
爲什麼我不能使用任何RGB值?你知道任何解決方法嗎?
謝謝。
Excel只使用調色板中的顏色。當您使用RGB值設置單元格時,它將在調色板中選擇最接近匹配的單元格。你可以用你的顏色更新調色板,然後選擇你的顏色,這將起作用。
這將讓你看到什麼是目前的調色板:
Public Sub checkPalette()
Dim i As Integer, iRed As Integer, iGreen As Integer, iBlue As Integer
Dim lcolor As Long
For i = 1 To 56
lcolor = ActiveWorkbook.Colors(i)
iRed = lcolor Mod &H100 'get red component
lcolor = lcolor \ &H100 'divide
iGreen = lcolor Mod &H100 'get green component
lcolor = lcolor \ &H100 'divide
iBlue = lcolor Mod &H100 'get blue component
Debug.Print "Palette " & i & ": R=" & iRed & " B=" & iBlue & " G=" & iGreen
Next i
End Sub
這將讓你設置的調色板
Public Sub setPalette(palIdx As Integer, r As Integer, g As Integer, b As Integer)
ActiveWorkbook.Colors(palIdx) = RGB(r, g, b)
End Sub
謝謝你的答案和意見爲好。
這真的給我帶來了很大的麻煩,因爲我的客戶端還在Excel中安裝了其他插件,這些插件也篡改了調色板。
我最終取代了調色板中的幾種顏色,然後把我的元素設置爲特定的ColorIndex,但是男孩,這不是很漂亮。
Sub color()
bj = CStr(Hex(ActiveCell.Interior.Color))
If Len(bj) < 6 Then
Do Until Len(bj) = 6
bj = "0" & bj
Loop
End If
R = CLng("&H" & Right(bj, 2))
bj = Left(bj, Len(bj) - 2)
G = CLng("&H" & Right(bj, 2))
bj = Left(bj, Len(bj) - 2)
B = CLng("&H" & bj)
End Sub
快速提示:Excel的調色板具有其很少被使用,通常可以設定爲自定義值,但無其他人的片材可見的變化的顏色兩行。
下面是創建一套合理的「軟調」的色彩,其遠不如進攻比默認代碼:
Public Sub SetPalePalette(Optional wbk As Excel.Workbook) ' This subroutine creates a custom palette of pale tones which you can use for controls, headings and dialogues '
' ** THIS CODE IS IN THE PUBLIC DOMAIN ** ' Nigel Heffernan http://Excellerando.Blogspot.com
' The Excel color palette has two hidden rows which are rarely used: ' Row 1: colors 17 to 24 ' Row 2: colors 25 to 32 - USED BY SetGrayPalette in this workbook '
' Code to capture existing Screen Updating settting and, if necessary, ' temporarily suspend updating while this procedure generates irritating ' flickers onscreen... and restore screen updating on exit if required.
Dim bScreenUpdating As Boolean
bScreenUpdating = Application.ScreenUpdating
If bScreenUpdating = True Then Application.ScreenUpdating = False End If
'If Application.ScreenUpdating <> bScreenUpdating Then ' Application.ScreenUpdating = bScreenUpdating 'End If
If wbk Is Nothing Then Set wbk = ThisWorkbook End If
With wbk
.Colors(17) = &HFFFFD0 ' pale cyan .Colors(18) = &HD8FFD8 ' pale green. .Colors(19) = &HD0FFFF ' pale yellow .Colors(20) = &HC8E8FF ' pale orange .Colors(21) = &HDBDBFF ' pale pink .Colors(22) = &HFFE0FF ' pale magenta .Colors(23) = &HFFE8E8 ' lavender .Colors(24) = &HFFF0F0 ' paler lavender
末隨着
如果Application.ScreenUpdating <> bScreenUpdating然後 應用程序。ScreenUpdating = bScreenUpdating 結束如果
末次
公用Sub SetGreyPalette() '此子例程創建greyshades您可以使用的控件,標題自定義調色板和對話
' **這碼是在公共領域** 「佰赫弗南http://Excellerando.Blogspot.com
」 Excel的調色板具有兩個隱藏行,其很少被使用: 「行1:顏色17至24」 - 在本工作簿中使用BY SetPalePalette 「行2:顏色25至32
」代碼來捕捉現有屏幕更新settting和,如果必要的話, '暫時而這個暫停更新程序會在屏幕上產生刺激性的 '閃爍......記得在退出時恢復屏幕更新!
昏暗bScreenUpdating由於布爾
bScreenUpdating = Application.ScreenUpdating
如果bScreenUpdating = TRUE,則 Application.ScreenUpdating =假 結束如果
'如果Application.ScreenUpdating <> bScreenUpdating然後 ' Application.ScreenUpdating = bScreenUpdating 'End If
隨着的ThisWorkbook .Colors(25)= & HF0F0F0 .Colors(26)= & HE8E8E8 .Colors(27)= & HE0E0E0 .Colors(28)= & HD8D8D8 .Colors(29)= & HD0D0D0 。顏色(30)= & HC8C8C8 「& HC0C0C0」跳過& HC0C0C0 - 這是在主面板中的常規的25%灰色 .Colors(31)= & HB8B8B8'。注意,間隙越來越大了:人眼更敏感 。顏色(32)= & HA8A8A8'在光灰度變化,所以這將被感知爲線性刻度 結束隨着
「Excel的默認調色板的右側列中指定以下灰色:
」的色彩(56)= & H333333 '顏色(16)= & H808080 ' 顏色(48)= & H969696 '顏色(15)= & HC0C0C0' 的缺省'25%的灰色 '
' 這應該被修飾以改善顏色「間隙'並使顏色容易區分勒:
隨着的ThisWorkbook .Colors(56)= & H505050 .Colors(16)= & H707070 .Colors(48)= & H989898 '。顏色(15)= & HC0C0C0 結束隨着
如果Application.ScreenUpdating <> bScreenUpdating然後 Application.ScreenUpdating = bScreenUpdating 結束如果
結束子
你可以選擇爲每個工作簿的Open()和BeforeClose()事件編寫一個'CaptureColors'和'ReinstateColors'函數...甚至每個作品heet激活和停用事件。
我有代碼躺在某處爲三維圖表創建一個「熱」顏色漸變,讓您從32個步驟中的「冷」藍色到「熱」紅色進展。這比你想象的要困難得多:人類視覺系統會感受到「等間隔」的顏色梯度(它運行在強度的對數尺度上,對紅色,綠色和藍色具有非線性權重作爲「強」顏色)需要花費時間來構建 - 而且您必須使用VBA以您指定的順序使用您指定的顏色強制MS Chart。
你*可以*用你的顏色更新調色板,但通常應該避免這樣做。一個問題是,使用不同的調色板複製並粘貼到不同的工作簿會給你不同的顏色。出於這個原因,堅持使用默認調色板通常會更好。 – Joe 2008-12-18 17:14:11
我的意思是反對......哎呀,謝謝喬。 – LeppyR64 2008-12-18 18:00:46