6

我想将单元格的字体颜色设置为特定的 RGB 值。

如果我使用

ActiveCell.Color = RGB(255,255,0)

我确实变黄了,但是如果我使用更具异国情调的 RGB 值,例如:

ActiveCell.Color = RGB(178, 150, 109)

我只是得到一个灰色的颜色。

为什么我不能只使用任何 RGB 值?你知道任何解决方法吗?

谢谢。

4

4 回答 4

7

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
于 2008-12-18T14:33:31.873 回答
2

快速提示: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 按照您指定的顺序使用您指定的颜色。

于 2012-08-20T16:39:23.037 回答
1
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
于 2012-01-12T14:45:07.077 回答
0

也感谢您的回答和评论。

这真的给我带来了很大的麻烦,因为我的客户在 Excel 中安装了其他插件,这些插件也篡改了调色板。

我最终在调色板中替换了一些颜色,然后为我的元素分配了特定的 ColorIndex,但是男孩,它并不漂亮。

于 2008-12-26T21:54:43.360 回答