Excel:使用RGB设置单元格的背景颜色和文本颜色

3

我正在编写一个程序,根据用户请求改变字体和背景颜色。收到backgroundColorDatatextColorData后,我想根据用户的请求修改颜色,但我感觉有一种更好的方法可以实现,而不是我选择的那种方法(我的代码可能会重复)。另一个问题是我没有找到答案,如何使文本颜色/背景颜色更加“红色”或“蓝色”。

  Select Case backgroundColorData
        Case Is = "Black"
            Selection.Interior.Color = RGB(0, 0, 0)
        Case Is = "Red"
             Selection.Interior.Color = RGB(255, 0, 0)
        Case Is = "Blue"
             Selection.Interior.Color = RGB(0, 0, 255)
        Case Is = "White"
             Selection.Interior.Color = RGB(255, 255, 255)
  End Select


    Select Case textColorData
        Case Is = "Black"
            Selection.Font.Color = RGB(0, 0, 0)
        Case Is = "Red"
             Selection.Font.Color = RGB(255, 0, 0)
        Case Is = "Blue"
             Selection.Font.Color = RGB(0, 0, 255)
        Case Is = "White"
             Selection.Font.Color = RGB(255, 255, 255)
     End Select  

任何帮助都将不胜感激。


欢迎来到 StackOverflow,David。虽然任何新用户都受到欢迎,但我认为您的帖子可能不适合在这里发布。如果您正在努力优化代码,则应在此处发布您的问题:http://codereview.stackexchange.com/ 这是您将发布仅需要进行优化的可工作代码的地方。关于您的其他问题:寻找比红色更“红”的颜色,您可能需要尝试使用 Windows 提供的颜色(16+百万种颜色),如果仍然不够,则可能需要投资购买新的显示器。 - Ralph
嘿@Ralph,感谢您的评论。我是这个网站的新手,我没有听说过您提到的网站,但请放心,下次我需要“优化代码”的建议时,我会使用它。关于我的第二个问题,我认为我没有很好地解释我的问题: 当用户要求我使单元格背景更蓝或更红(等等)时,是否有RGB选项可以相对于当前颜色进行操作?例如像这样的东西:.Font.Color = Rgb(+100红色)? - David
2个回答

2
Sub tester()

    Dim backgroundColorData As String, textColorData As String

    backgroundColorData = "Blue"
    textColorData = "White"

    With Selection
        .Interior.Color = NameToRgb(backgroundColorData)
        .Font.Color = NameToRgb(textColorData)
    End With

End Sub

'map a color name to an rgb value
Function NameToRgb(sName As String) As Long
    Dim arrNames, arrRGB, v
    arrNames = Array("black", "red", "blue", "white")
    arrRGB = Array(RGB(0, 0, 0), RGB(255, 0, 0), _
                   RGB(0, 0, 255), RGB(255, 255, 255))

    v = Application.Match(LCase(sName), arrNames, 0)
    If Not IsError(v) Then
        NameToRgb = arrRGB(v - 1)
    Else
        NameToRgb = vbBlack 'default...
    End If
End Function

如果您想找到某个“更红”的精确颜色值,请将单元格的背景设置为所需颜色,选择该单元格,然后在VB编辑器立即窗格中键入:

? Selection.Interior.Color 

复制数字并将其用作您的RGB()值的替代。

编辑:好的,现在我明白你的意思,让单元格更红...

Sub MoreRed(c As Range)
    Dim R As Long, G As Long, B As Long, clr As Long

    clr = c.Interior.Color
    B = clr \ 65536
    G = (clr - B * 65536) \ 256
    R = clr - B * 65536 - G * 256
    'Debug.Print R, G, B
    R = Application.Min(R + 20, 255) 'more red...
    c.Interior.Color = RGB(R, G, B)
End Sub

谢谢@TimWilliams,这非常有帮助!关于你回答的第二部分,也许我应该再问一遍(更清楚地),当用户要求我将单元格背景变得更蓝或红(等等...)时,是否有任何选项可以相对于当前颜色使用RGB来实现?例如像这样的东西:.Font.Color = Rgb(+100 红色) ?? - David
你肯定可以尝试调整“红色”参数(RGB调用中的第一个参数)。RGB(100, 0, 255)比RGB(0, 0, 255)更“红”。 - Tim Williams
好的,但是你的回答假设当前单元格中的颜色为RGB(0,0,255),而我不知道这一点,这就是我正在寻找一种相对于已经存在的颜色进行操作的方法的原因... - David
谢谢@Tim,我自己永远也想不到那个答案,你的回答真的很有帮助,谢谢! - David

1
欢迎来到Stack Overflow。
您可以使用以下单个函数完成此操作 -
Function setColor(SelectionData As String) 

 Select Case SelectionData As String
      Dim returnValue As String  
        Case Is = "Black"
            returnValue  = RGB(0, 0, 0)
        Case Is = "Red"
             returnValue  = RGB(255, 0, 0)
        Case Is = "Blue"
             returnValue  = RGB(0, 0, 255)
        Case Is = "White"
             returnValue  = RGB(255, 255, 255)
     End Select  
return returnValue  
End Function

然后只需像这样调用您的函数 -
setColor(textColorData)

谢谢,这也非常有帮助! - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接