我想将单元格的字体颜色设置为特定的 RGB 值。
如果我使用
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 调色板有两行很少使用的颜色,通常可以设置为自定义值,而不会对其他人的工作表进行可见的更改。
这是创建一组合理的“柔和色调”颜色的代码,这些颜色远没有默认设置那么令人反感:
Public Sub SetPalePalette(可选 wbk As Excel.Workbook) ' 这个子例程创建一个自定义的淡色调调色板,您可以将其用于控件、标题和对话 '
' ** 此代码在公共领域 ** ' Nigel Heffernan http://Excellerando.Blogspot.com
' Excel 调色板有两个很少使用的隐藏行: ' 第 1 行:颜色 17 到 24 ' 第 2 行:颜色 25 到 32 - 本工作簿中的 SetGrayPalette 使用 '
' 捕获现有屏幕更新设置的代码,如有必要, ' 暂时暂停更新,而此过程会产生刺激性 ' 在屏幕上闪烁...并在退出时恢复屏幕更新(如果需要)。
Dim bScreenUpdating 为布尔值
bScreenUpdating = Application.ScreenUpdating
如果 bScreenUpdating = True 那么 Application.ScreenUpdating = False 万一
'如果 Application.ScreenUpdating <> bScreenUpdating Then ' 应用程序.ScreenUpdating = bScreenUpdating '万一
如果 wbk 什么都不是,那么 设置 wbk = ThisWorkbook 万一
带 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 Then Application.ScreenUpdating = bScreenUpdating 万一
结束子
公共子集GreyPalette() ' 这个子例程创建一个自定义的灰色阴影调色板,您可以将其用于控件、标题和对话
' ** 此代码在公共领域 ** ' Nigel Heffernan http://Excellerando.Blogspot.com
' Excel 调色板有两个很少使用的隐藏行: ' 第 1 行:颜色 17 到 24 ' - 本工作簿中的 SetPalePalette 使用 ' 第 2 行:颜色 25 到 32
' 捕获现有屏幕更新设置的代码,如有必要, ' 暂时暂停更新,而此过程会产生刺激性 ' 屏幕上闪烁...记得在退出时恢复屏幕更新!
Dim bScreenUpdating 为布尔值
bScreenUpdating = Application.ScreenUpdating
如果 bScreenUpdating = True 那么 Application.ScreenUpdating = False 万一
'如果 Application.ScreenUpdating <> bScreenUpdating Then ' 应用程序.ScreenUpdating = bScreenUpdating '万一
使用本工作簿 .颜色(25) = &HF0F0F0 .颜色(26) = &HE8E8E8 .颜色(27) = &HE0E0E0 .Colors(28) = &HD8D8D8 .颜色(29) = &HD0D0D0 .Colors(30) = &HC8C8C8 ' &HC0C0C0 ' 跳过 &HC0C0C0 - 这是主调色板中的常规 25% 灰色 .Colors(31) = &HB8B8B8 ' 注意差距越来越大:人眼更敏感 .Colors(32) = &HA8A8A8 ' 改变浅灰色,因此这将被视为线性比例 结束于
'Excel 默认调色板的右侧列指定以下灰色:
' 颜色 (56) = &H333333 ' 颜色 (16) = &H808080 ' 颜色 (48) = &H969696 ' Colors(15) = &HC0C0C0 ' 默认 '25% 灰色'
' 这应该被修改以改善颜色“差距”并使颜色易于区分:
使用本工作簿 .颜色(56) = &H505050 .颜色(16) = &H707070 .Colors(48) = &H989898 ' .Colors(15) = &HC0C0C0 结束于
如果 Application.ScreenUpdating <> bScreenUpdating Then Application.ScreenUpdating = bScreenUpdating 万一
结束子
您可以选择为每个工作簿的 Open() 和 BeforeClose() 事件编写一个“CaptureColors”和“ReinstateColors”函数......甚至为每个工作表的激活和停用事件。
我有代码在某处为 3-D 图表创建“热”颜色渐变,让您在 32 个步骤中从“冷”蓝色变为“热”红色。这比您想象的要难:人类视觉系统将感知为“等间隔”的颜色梯度(以强度的对数刻度运行,并且红色、绿色和蓝色的非线性权重为“强”颜色) 需要时间来构建 - 您必须使用 VBA 强制 MS Chart 按照您指定的顺序使用您指定的颜色。
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 中安装了其他插件,这些插件也篡改了调色板。
我最终在调色板中替换了一些颜色,然后为我的元素分配了特定的 ColorIndex,但是男孩,它并不漂亮。