Dobrý den,
narazil jsem na problém s vrácením čísla ColorIndex. (Office 2007)
Při použití
Function BarvaIndex(CellToPickColorFrom As Range) As Integer
BarvaIndex = CellToPickColorFrom.Interior.ColorIndex
End Function
se mi vrátí číslo colorindex ale když si navolím nějaké vlastní barvy tak mi u dvou odlišných odstínů, třeba zelená, vrátí to samé číslo. Až tak velký problém by to nebyl kdybych s tím dál nepočítal.
Nevíte co s tím, nebo proč to dělá?
Vrácení čísla ColorIndex (VBa) Vyřešeno
-
- Level 1
- Příspěvky: 76
- Registrován: leden 11
- Bydliště: Pardubice
- Pohlaví:
- Stav:
Offline
Vrácení čísla ColorIndex (VBa)
"V případě hrubé nedbalosti hlavního počítače vedoucí k ohrožení posádky jsou všechny lodě Jupiterské důlní společnosti povinny mít záložní počítač, který nahradí počítač hlavní." Červený trpaslík.
Re: Vrácení čísla ColorIndex (VBa)
Problem je v tom ColorIndex - ten totiz umi jen 56 zakladnich barev Excelu. Je lepsi pouzivat .Color, kde uz je tech barev nepreberne
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: Vrácení čísla ColorIndex (VBa)
Ve VBA vlastnost ColorIndex zaokrouhluje index na nejblizsi index zakladnich barev.
Pro ilustraci si spust proceduru:
Pro ilustraci si spust proceduru:
Kód: Vybrat vše
Sub ColorBunka()
Dim R As Integer, G As Integer, B As Integer
Dim i As Long, Bunka As Range
Set Bunka = ActiveSheet.Range("a1")
With Bunka
.Offset(0, 1).Value = "Color"
.Offset(0, 2).Value = "ColorIndex"
.Offset(0, 3).Value = "R"
.Offset(0, 4).Value = "G"
.Offset(0, 5).Value = "B"
End With
i = 1
For R = 0 To 255 Step 16
For G = 0 To 255 Step 16
For B = 0 To 255 Step 16
With Bunka
.Offset(i, 0).Interior.Color = RGB(R, G, B)
.Offset(i, 1).Value = .Offset(i, 0).Interior.Color
.Offset(i, 2).Value = .Offset(i, 0).Interior.ColorIndex
.Offset(i, 3).Value = R
.Offset(i, 4).Value = G
.Offset(i, 5).Value = B
.Offset(0, 7).Value = i
End With
i = i + 1
Next B
Next G
Next R
End Sub
-
- Level 1
- Příspěvky: 76
- Registrován: leden 11
- Bydliště: Pardubice
- Pohlaví:
- Stav:
Offline
Re: Vrácení čísla ColorIndex (VBa)
Ahaa, takže colorindex nepracuje v RGB režimu? Chápu to dobře. Proto moje teorie, že právě každý odstín má svůj vlastní colorindex je špatná.
Zkusím to s .Color. Děkuji za ochotu.
Zkusím to s .Color. Děkuji za ochotu.
"V případě hrubé nedbalosti hlavního počítače vedoucí k ohrožení posádky jsou všechny lodě Jupiterské důlní společnosti povinny mít záložní počítač, který nahradí počítač hlavní." Červený trpaslík.
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: Vrácení čísla ColorIndex (VBa)
VBA - vlastnost Range - ColorIndex:
Read - zaokrouhli (zkoriguje) index na index odpovidajici nastavenym zakladnim barvam (0 - 56)
Write - pouze indexy zakladnich barev (0 - 56).
Vlastnost Color v celem rozsahu RGB od veze Excel 2007 (u starsich verzi byly barvy korigovany na zakladni barvy; barvy v celem rozsahu bylo mozno vlozit pouze do objektu)
Read - zaokrouhli (zkoriguje) index na index odpovidajici nastavenym zakladnim barvam (0 - 56)
Write - pouze indexy zakladnich barev (0 - 56).
Vlastnost Color v celem rozsahu RGB od veze Excel 2007 (u starsich verzi byly barvy korigovany na zakladni barvy; barvy v celem rozsahu bylo mozno vlozit pouze do objektu)
-
- Level 1
- Příspěvky: 76
- Registrován: leden 11
- Bydliště: Pardubice
- Pohlaví:
- Stav:
Offline
Re: Vrácení čísla ColorIndex (VBa)
Teď jsem tedy trošku vyveden z míry. Tedy pokud chci používat colorindex pak dostanu jen základních 56 barev? Jde o to, že já pak následně pomocí ColorIndex provádím další úlohy.
Dostanu nebo nedostanu z colorindex právě jedno číslo právě k jednomu odstínu barvy?
Dostanu nebo nedostanu z colorindex právě jedno číslo právě k jednomu odstínu barvy?
"V případě hrubé nedbalosti hlavního počítače vedoucí k ohrožení posádky jsou všechny lodě Jupiterské důlní společnosti povinny mít záložní počítač, který nahradí počítač hlavní." Červený trpaslík.
Re: Vrácení čísla ColorIndex (VBa)
Podle meho z ColorIndex dostanes vzdy jen 56 barev...
Jsem ani netusil, ze Color je v celem RGB az od 2007, diky Navstevniku.
Jsem ani netusil, ze Color je v celem RGB az od 2007, diky Navstevniku.
-
- Level 4
- Příspěvky: 1142
- Registrován: srpen 08
- Pohlaví:
- Stav:
Offline
Re: Vrácení čísla ColorIndex (VBa) Vyřešeno
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):
Takze pouziti vlastnosti ColorIndex umoznuje pracovat pouze s 56 zakladnimi barvami.
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.
-
- Level 1
- Příspěvky: 76
- Registrován: leden 11
- Bydliště: Pardubice
- Pohlaví:
- Stav:
Offline
Re: Vrácení čísla ColorIndex (VBa)
Ano. Již jsem to pochopil. Vycházel jsem ze svých znalostí RGB. ColorBuňka jsem pouštěl a pochopil, jen jsem se pak do toho trošku zamotal. Děkuji za odpověď a ochotu.
"V případě hrubé nedbalosti hlavního počítače vedoucí k ohrožení posádky jsou všechny lodě Jupiterské důlní společnosti povinny mít záložní počítač, který nahradí počítač hlavní." Červený trpaslík.
-
- Mohlo by vás zajímat
- Odpovědi
- Zobrazení
- Poslední příspěvek
-
-
Jak odstranit zelená čísla ve wordu Příloha(y)
od symetrala » 14 zář 2024 13:54 » v Kancelářské balíky - 3
- 3350
-
od elninoslov
Zobrazit poslední příspěvek
15 zář 2024 09:27
-
-
-
Co jako první udělat přenos tel čísla nebo aktivaci sim
od p3v4x » 04 říj 2024 15:26 » v Mobily, tablety a jiná přenosná zařízení - 1
- 3186
-
od Zivan
Zobrazit poslední příspěvek
04 říj 2024 15:55
-
Kdo je online
Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 9 hostů