To WikisRuleZz:
Muj strucny nahled na problem:
Trocha historie: Dos zacinal s 8 barvami, pod Win pribyly dalsi a v dobe MSEx 2000??-2003 bylo pouzito 56 zakladnich barev, vlastnost Color vracela jejich ciselne dekadicke vyjadreni (kombinace 8-mi bitoveho vyjadreni RGB - poskytuje cca >16 mil barev, ovsem bylo pouzito jen 56 kombinaci, ktere bylo mozno v nastaveni napr. Excelu upravit dle potreby a na tyto nejblizsi barvy bylo jakekoliv zadani Color (pozadi, fontu, ohraniceni,..) konvertovano.
Protoze ciselne vyjadreni dekadickym cislem zrejme nebylo prakticke, byla vyvojari pouzita vlastnost ColorIndex prirazujici temto definovanym barvam indexy 1 - 56.
MSEx 2007 umoznuje jiz pouzit pro pozadi, font, ohraniceni,.. cely rozsah barev &H000000 - &HFFFFFF. A v tomto okamziku prirazeni indexu kazde barve ztraci smysl - indexy by byly totozne s ciselnym vyjadrenim barvy a bylo by jich cca >16 mil., takze nejspis vyvojari ponechali rozsah indexu 1-56 a jeho hodnota jen vyjadruje jakousi "prumernou", nejblizsi barvu.
Lze si to overit spustenim drive uvedene procedury Sub ColorBunka() v Excelu 2000 - nikoliv pod 2007 jako starsi verze souboru! (jsou zobrazeny a ciselne vyjadreny jen zakladni barvy) a v Excelu 2007 (jsou zobrazeny zadane barvy, Color vraci jejich skutecnou hodnotu, ale ColorIndex konvertovanou hodnotu v rozsahu 1 - 56 - v urcitem rozsahu barev se nemeni).
Nize uvedena procedura zobrazi zakladni barvy (vzakladnim nastaveni Excelu), indexy, cislo barvy, slozky RGB (prezentoval J Cihar):
Kód: Vybrat vše
Option Explicit
Sub palette()
'57 colors, 0 to 56; 0 - bez barvy
Application.ScreenUpdating = False
Dim i As Long
Dim str0 As String
Cells(1, 16) = "Barva Ind"
Cells(1, 17) = "Barva Ind"
Cells(1, 18) = "Color BGR"
Cells(1, 19) = "Hex RGB"
Cells(1, 20) = "Èervená"
Cells(1, 20).Font.Color = RGB(255, 0, 0)
Cells(1, 21) = "Zelená"
Cells(1, 21).Font.Color = RGB(0, 255, 0)
Cells(1, 22) = "Modrá"
Cells(1, 22).Font.Color = RGB(0, 0, 255)
Range("p1:v1").Select
With Selection
.Font.Bold = True
.HorizontalAlignment = xlCenter
.VerticalAlignment = xlBottom
End With
For i = 0 To 56
Cells(i + 2, 16).Interior.ColorIndex = i
Cells(i + 2, 16).Value = "[Barva " & i & "]"
Cells(i + 2, 17).Font.ColorIndex = i
Cells(i + 2, 17).Value = "[Barva " & i & "]"
Cells(i + 2, 18) = Cells(i + 2, 16).Interior.Color
str0 = Right("000000" & Hex(Cells(i + 2, 16).Interior.Color), 6) ' B*#FFFF+G*#FF+R hex
Cells(i + 2, 19) = "#" & Right(str0, 2) & Mid(str0, 3, 2) & Left(str0, 2) ' RGB hex
Cells(i + 2, 20).Value = Hex2dec(Right(str0, 2)) ' R
Cells(i + 2, 21).Value = Hex2dec(Mid(str0, 3, 2)) ' G
Cells(i + 2, 22).Value = Hex2dec(Left(str0, 2)) ' B
Next i
Application.ScreenUpdating = True
End Sub
Function Hex2dec(hexNum As String)
Dim i As Long
Dim Tmp As Long
Dim Tmp1 As Long
Dim c
Tmp = 0
For i = 1 To Len(hexNum)
c = Mid(hexNum, i, 1)
Tmp1 = Asc(c) - 48
If (c >= Chr(65) And c <= Chr(70)) Then Tmp1 = Tmp1 - 7
Tmp = Tmp * 16 + Tmp1
Next i
Hex2dec = Tmp
End Function
Takze pouziti vlastnosti ColorIndex umoznuje pracovat pouze s 56 zakladnimi barvami.