2009-09-15 10 views

Odpowiedz

45

Można użyć VBA - coś jak

Range("A1:A6").Interior.Color = RGB(127,187,199) 

Wystarczy przekazać wartości komórki.

17

Ustawienie samej właściwości Kolor zagwarantuje dokładne dopasowanie. Program Excel 2003 może obsłużyć tylko 56 kolorów jednocześnie. Dobrą wiadomością jest to, że możesz przypisać dowolną wartość rgb do tych 56 gniazd (które są nazywane ColorIndex). Po ustawieniu koloru komórki za pomocą właściwości Kolor spowoduje to, że program Excel użyje najbliższego "Koloru". Przykład: Ustawienie komórki na RGB 10,20,50 (lub 3281930) spowoduje, że zostanie ustawione na indeks koloru 56, który wynosi 51.51,51 (lub 3355443).

Jeśli chcesz mieć pewność, że masz dokładne dopasowanie, musisz zmienić ColorIndex na żądaną wartość RGB, a następnie zmienić ColorIndex komórki na tę wartość. Należy jednak pamiętać, że zmieniając wartość indeksu kolorów, zmienia się kolor komórek już korzystających z tego koloru w skoroszycie. Aby podać przykład, czerwony to ColorIndex 3. Tak więc każda komórka, którą zrobiłeś, zmieniła się w ColorIndex 3. Jeśli zmienisz definicję ColorIndex 3 na fioletowy, twoja komórka rzeczywiście stanie się fioletowa, ale wszystkie inne czerwone komórki w skoroszyt zostanie również zmieniony na fioletowy.

Istnieje kilka strategii radzenia sobie z tym. Jednym ze sposobów jest wybór indeksu, który nie jest jeszcze w użyciu, lub tylko taki, który według Ciebie nie będzie prawdopodobnie używany. Innym sposobem jest zmiana wartości RGB na najbliższy ColorIndex, więc zmiana będzie subtelna. Kod, który napisałem poniżej, stosuje to podejście. Korzystając z wiedzy, że najbliższy ColorIndex jest przypisany, przypisuje wartość RGB bezpośrednio do komórki (tym samym uzyskując najbliższy kolor), a następnie przypisuje wartość RGB do tego indeksu.

Sub Example() 
    Dim lngColor As Long 
    lngColor = RGB(10, 20, 50) 
    With Range("A1").Interior 
     .Color = lngColor 
     ActiveWorkbook.Colors(.ColorIndex) = lngColor 
    End With 
End Sub 
+0

Dzięki, jest to również bardzo pomocne. –

1

Komórki nie można zmienić z poziomu funkcji VBA używanej jako formuła arkusza roboczego. Tylko za pośrednictwem tego obejścia ...

Umieść tę funkcję do nowego modułu:

Function SetRGB(x As Range, R As Byte, G As Byte, B As Byte) 
    On Error Resume Next 
    x.Interior.Color = RGB(R, G, B) 
    x.Font.Color = IIf(0.299 * R + 0.587 * G + 0.114 * B < 128, vbWhite, vbBlack) 
End Function 

następnie wykorzystać tę formułę w arkuszu, na przykład w komórce D2:

=HYPERLINK(SetRGB(D2;A2;B2;C2);"HOVER!") 

Po najechaniu mysz nad komórką (spróbuj!), kolor tła aktualizuje RGB z komórek A2 do C2. Kolor czcionki jest kontrastowy, biały lub czarny.

0

Aby pokolorować każdą komórkę na podstawie jej bieżącej wartości całkowitej, następujące czynności powinny działać, jeśli masz najnowszą wersję programu Excel. (Starsze wersje nie obsługują rgb również)

Sub Colourise() 
' 
' Colourise Macro 
' 
' Colours all selected cells, based on their current integer rgb value 
' For e.g. (it's a bit backward from what you might expect) 
' 255 = #ff0000 = red 
' 256*255 = #00ff00 = green 
' 256*256*255 #0000ff = blue 
' 255 + 256*256*255 #ff00ff = magenta 
' and so on... 
' 
' Keyboard Shortcut: Ctrl+Shift+C (or whatever you want to set it to) 
' 
    For Each cell In Selection 
    If WorksheetFunction.IsNumber(cell) Then 
     cell.Interior.Color = cell.Value 
    End If 
    Next cell 
End Sub 

Jeśli zamiast numeru masz ciąg następnie można podzielić na trzy ciąg liczb i połączyć je za pomocą RGB().

Powiązane problemy