2016-11-12 266 views
1

我正在编写一个程序,用于根据用户请求更改字体和背景颜色。之后收到backgroundColorDatatextColorData 我不喜欢变动,由于用户要求的颜色,但我觉得有一个更好的办法,使其然后我选择这样做(我的代码可能重演)等 问题,我没'找到答案是如何使textColor/backgroundColor更“红”或更多“蓝”Excel:使用rgb设置单元格和文本颜色的背景颜色

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 

任何帮助,将不胜感激。

+0

欢迎到StackOverflow,David。尽管欢迎任何新用户,但在我看来,帖子可能在这里放错了位置。如果你正在努力优化代码,那么你应该在这里发布你的问题:http://codereview.stackexchange.com/这是你发布**工作**代码,只需要优化。关于你的另一个问题:寻找一种比红色更“红”的颜色,你可能想要试验窗户提供的颜色(1600万色),如果仍然不够,那么你可能想投资于一个新的显示器。 – Ralph

+0

嗨@Ralph,感谢您的评论我是新的在这个网站,我没有仇恨你提到的网站,但一定要在下次我会用“优化代码”的建议时使用它。关于我的第二个问题,我想我没有解释清楚我的问题: 当用户要求我使单元格背景更蓝或红色(等..)是否有任何选项与RGB做到这一点相对于当前的颜色?例如类似的东西:.Font.Color = Rgb(+100红色)?? – David

回答

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()值的

编辑:OK,现在我明白你的意思有关使细胞更红了什么......

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 
+0

谢谢@TimWilliams,这非常有帮助!关于你的答案的第二部分,也许我应该再问一次(更清楚地)当用户要求我使单元格背景更蓝或红(等等)是否有任何选择使用RGB来做到这一点相对于当前颜色?例如类似的东西:.Font.Color = Rgb(+100红色)?? – David

+0

那么,你当然可以尝试调整“红色”矿物(RGB调用中的第一个参数)。 OK(RGB)(100,0,255)比RGB(0,0,255)“更红” –

+0

好,但你的答案是假设当前单元格中的颜色是RGB(0,0,255),并且我不不知道,这就是我正在寻找一种方式来做到这一点相对颜色已经存在的原因... – David

0

欢迎使用堆栈溢出。

您就可以使用这个 -

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) 
+0

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

相关问题