2016-11-12 13 views
1

Ich schreibe ein Programm, das Schriftart und Hintergrundfarbe aufgrund der Benutzeranforderung ändern. nach empfangen backgroundColorData und textColorData i, aber ich fühlte mich auf Farben auf Wunsch des Benutzers ändern es einen besseren Weg, es ist dann zu machen, was ich wählen, zu tun (mein Code vielleicht wiederholt sich) andere Frage, die ich didn ‚t eine Antwort finden, wie Textfarbe/background mehr‚rot‘oder mehr‚blau‘Excel: Hintergrundfarbe der Zelle und Textfarbe mit RGB setzen

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 

Jede Hilfe würde geschätzt zu machen.

+0

Willkommen zu StackOverflow, David. Obwohl jeder neue Benutzer immer willkommen ist, scheint mir der Beitrag hier verlegt zu sein. Wenn Sie danach streben, den Code zu optimieren, sollten Sie Ihre Frage lieber hier posten: http://codereview.stackexchange.com/ Hier würden Sie ** funktionierenden ** Code veröffentlichen, der lediglich optimiert werden muss. In Bezug auf Ihre andere Frage: auf der Suche nach einer Farbe, die "roter" als rot ist, möchten Sie möglicherweise mit den Farben von Windows (16 Millionen Farben) experimentieren und wenn das immer noch nicht ausreicht, dann sollten Sie vielleicht in investieren ein neuer Monitor. – Ralph

+0

Hey @Ralph, danke für deinen Kommentar, ich bin neu auf dieser Seite und ich habe mich nicht über die Seite gemerkt, die du erwähnt hast, aber sei sicher, dass ich sie das nächste Mal benutzen werde. über meine zweite Frage Ich denke, ich habe nicht gut meine Frage zu erklären: wenn ein Benutzer mich fragen, um eine Zelle Hintergrund mehr Blau oder Rot (etc ..) gibt es eine Option mit RGB, um es relativ zur aktuellen Farbe zu tun? zum Beispiel so etwas: .Font.Color = Rgb (+100 rot) ?? – David

Antwort

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 

Wenn Sie einen genauen Farbwert finden wollen Für etwas "mehr rot", legen Sie den Hintergrund in einer Zelle auf die gewünschte Farbe, wählen Sie die Zelle, dann im VB-Editor Sofort-Fenster Typ:

? Selection.Interior.Color 

Kopieren Sie die Nummer und verwenden, die anstelle Ihres RGB() Wert

EDIT: OK jetzt sehe ich, was Sie eine Zelle mehr rot bedeuten über die Herstellung ...

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

Danke @TimWilliams, das ist sehr hilfreich! über deinen zweiten Teil deiner Antwort, vielleicht sollte ich nochmal (deutlicher) fragen, wenn ein User mich fragt, einen Zellhintergrund mehr Blau oder Rot zu machen (etc ..) Gibt es bei RGB irgendeine Möglichkeit dies relativ zur aktuellen Farbe zu machen ? zum Beispiel so etwas: .Font.Color = Rgb (+100 rot) ?? – David

+0

Nun, Sie können sicherlich versuchen, das "rote" Signal einzustellen (der erste Parameter im RGB-Aufruf). RGB (100, 0, 255) ist "mehr rot" als RGB (0, 0, 255) –

+0

OK, aber Ihre Antwort wird davon ausgegangen, dass die Farbe in der aktuellen Zelle RGB (0, 0, 255) ist, und ich don Das weiß ich nicht, das ist der Grund, warum ich nach einem Weg suche, es relativ zu der Farbe zu machen ist schon da ... – David

0

Willkommen beim Stapelüberlauf.

Sie können es mit einer einzigen Funktion tun wie this-

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 

Und dann rufen Sie einfach Ihre Funktion wie this-

setColor(textColorData) 
+0

Danke, das ist auch sehr hilfreich! – David

Verwandte Themen