Todo en esta vida tiene color, y es costumbre pintar todo aquello que hacemos para darle un aspecto agradable y conforme a nuestro gusto. El siguiente problema radica en las ocasiones en las que queremos decir a alguien que pinte un objeto de un determinado color. A menos que sea blanco o negro, el resto de los colores tienen muchos matices. Por esta razón surge la carta RAL, donde se le asigna a cada color un valor numérico.
Como dice en la página web de RAL, el ojo humano distingue unos 10 millones de colores. ¿Como se puedes decir a que color te refieres?
Exiten otras cartas de colores como PANTONE, Pantone Inc. es una empresa con sede en Carlstadt, Nueva Jersey (Estados Unidos), creadora de un sistema de control de color para las artes gráficas. Su sistema de definición cromática es el más reconocido y utilizado por lo que normalmente se llama Pantone al sistema de control de colores. Este modo de color a diferencia de los modos CMYK y RGB suele denominarse color directo.
Normalmente, en el mundo de la construcción se suele trabajar con la carta de colores RAL, por esta razón, aquí dejo un archivo pdf, con la carta de colores RAL con su correspondiente valor R,G,B en hexadecimal, para poder utilizarlo en programas gráficos, además de un listado de colores por su nombre.
Para pasar de un numero hexadecimal a decimal, he utilizado la siguiente función:
Public Function ConvertHexToDecimal(ByVal HexValue As String) As Variant Dim rValue, A As Long Dim Temp, Rev As String Rev = StrReverse(HexValue) `Numbers are read from right to left, unlike text, which `are read from right to left; therefore, the string should `be reversed so it can be read like a normal string. For A = 1 To Len(HexValue) Temp = Mid$(Rev, A, 1) `This, along with the for-next loop allows you to `read all the characters in the screen 1 at a time If Val(Temp) = Temp Then `Character is a number If A = 1 Then `Character is a number, and is the first `character in the string rValue = Val(Temp) `Because the character is the first of the `string, there is no value in rValue yet, so `you can just assign the value Else rValue = rValue + (Val(Temp) * (16 ^ (A - 1))) `So this adds to rValue.. it takes it`s `current value, and adds to it, so the `previous value isn`t lost. Because single `digit hex values can be up to a value of 15, `the decimal value of 10 would be 16. Now, `values are not their own when they are not `their own if they aren`t the first character `of the string. Here, we use exponents.. `if 16^0 were 0, then I would have done this `diffrently, but because it isn`t, it has to `be it`s position(a) -1. The -1 is because `you don`t multiply by 16 on the first `character, you start it on the 2nd character. End If Else Select Case LCase$(Temp) `Because single digit hex values can go up to `15, more characters were needed, so A - F `were added in. A has the value of 10, B has `the value of 11, and so forth. G is not a `valid character because it is a 15 value `system. Here, it just goes through the `valid letters, and does the same thing it did `with numbers. Case "a" If A = 1 Then rValue = HexA Else rValue = rValue + (HexA * (16 ^ (A - 1))) End If Case "b" If A = 1 Then rValue = HexB Else rValue = rValue + (HexB * (16 ^ (A - 1))) End If Case "c" If A = 1 Then rValue = HexC Else rValue = rValue + (HexC * (16 ^ (A - 1))) End If Case "d" If A = 1 Then rValue = HexD Else rValue = rValue + (HexD * (16 ^ (A - 1))) End If Case "e" If A = 1 Then rValue = HexE Else rValue = rValue + (HexE * (16 ^ (A - 1))) End If Case "f" If A = 1 Then rValue = HexF Else rValue = rValue + (HexF * (16 ^ (A - 1))) End If End Select End If DoEvents `ALWAYS have this in loops.. you don`t know how slow `the computer it`s being operated on is, the lack of `DoEvents could cause the computer freeze up `temporerily, or even force you to force shutdown. Next A ConvertHexToDecimal = rValue `Sends the value that has been made out :) End Function Function set_CELL_BACKCOLOR(vSheet,lRowIndex&,iColIndex%,r,g,b) `calls: getSheetCell REM returns color code as number ThisComponent.Sheets.getByName(vSheet) .getCellByPosition(lRowIndex,iColIndex).CellBackColor = RGB(r,g,b) End Function
El archivo pdf con los colores: