Excel: установить цвет фона ячейки и текста с помощью rgb

Я пишу программу, которая меняет шрифт и цвет фона по запросу пользователя. после получения backgroundColorData и textColorData я действительно хотел изменить цвета из-за запроса пользователя, но я чувствую, что есть лучший способ сделать то, что я выбрал (мой код, возможно, повторяется), другая проблема, для которой я не нашел ответа как сделать textColor/backgroundColor более "красным" или более "синим"

  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  

Любая помощь будет оценена.

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

Добро пожаловать в переполнение стека.

Вы можете сделать это с помощью одной функции:

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)
Другие вопросы по тегам