我想将单元格的字体颜色设置为特定的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