2016-11-12 215 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