Excel:使用rgb设置单元格和文本颜色的背景颜色
我正在编写一个程序,用于根据用户请求更改字体和背景颜色。之后收到backgroundColorData和textColorData 我不喜欢变动,由于用户要求的颜色,但我觉得有一个更好的办法,使其然后我选择这样做(我的代码可能重演)等 问题,我没'找到答案是如何使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
任何帮助,将不胜感激。
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
谢谢@TimWilliams,这非常有帮助!关于你的答案的第二部分,也许我应该再问一次(更清楚地)当用户要求我使单元格背景更蓝或红(等等)是否有任何选择使用RGB来做到这一点相对于当前颜色?例如类似的东西:.Font.Color = Rgb(+100红色)?? – David
那么,你当然可以尝试调整“红色”矿物(RGB调用中的第一个参数)。 OK(RGB)(100,0,255)比RGB(0,0,255)“更红” –
好,但你的答案是假设当前单元格中的颜色是RGB(0,0,255),并且我不不知道,这就是我正在寻找一种方式来做到这一点相对颜色已经存在的原因... – David
欢迎使用堆栈溢出。
您就可以使用这个 -
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
欢迎到StackOverflow,David。尽管欢迎任何新用户,但在我看来,帖子可能在这里放错了位置。如果你正在努力优化代码,那么你应该在这里发布你的问题:http://codereview.stackexchange.com/这是你发布**工作**代码,只需要优化。关于你的另一个问题:寻找一种比红色更“红”的颜色,你可能想要试验窗户提供的颜色(1600万色),如果仍然不够,那么你可能想投资于一个新的显示器。 – Ralph
嗨@Ralph,感谢您的评论我是新的在这个网站,我没有仇恨你提到的网站,但一定要在下次我会用“优化代码”的建议时使用它。关于我的第二个问题,我想我没有解释清楚我的问题: 当用户要求我使单元格背景更蓝或红色(等..)是否有任何选项与RGB做到这一点相对于当前的颜色?例如类似的东西:.Font.Color = Rgb(+100红色)?? – David