Question

J'essaie de définir une constance publique d'une couleur dans mon code VBA. Normalement, je peux utiliser:

Dim BLUE As Long
BLUE = RGB(183, 222, 232)

Cependant, il n'y a aucun moyen de construir le public en raison de la fonction RVB. J'ai converti cette valeur RVB en hex

Utilisant:

BLUE = &HB7DEE8

entraîne une couleur complètement différente. Je pense que cela peut être une couleur RGBA, et j'ai essayé B7DEE8__ et j'ai obtenu la couleur assez proche (avec le dernier chiffre étant B8), mais j'aimerais savoir comment trouver la bonne valeur.

Remarque: Je n'ai pas vraiment besoin de code pour convertir cela en hexadécimal, j'ai juste besoin de savoir comment le trouver, car j'ai cinq couleurs constantes que j'utilise sur ma feuille Excel, et je voudrais les configurer.

Était-ce utile?

La solution

Vous devrez inverser les octets en ordre

BLUE = &HE8DEB7

pour obtenir la bonne valeur de couleur.

Autres conseils

La raison de l'inversion apparente est que la fonction RGB () crée en fait une valeur BGR.

Plus précisément, l'octet rouge est l'octet d'ordre bas et l'octet bleu est l'octet d'ordre élevé (ou le tiers de quatre au moins).

Essayez cet exemple dans la fenêtre immédiate:

x = RGB(255, 0, 128) ' full red, half blue
? hex(x)
8000FF

x = RGB(128, 0, 255) ' half red, full blue
? hex(x)
FF0080

Notez que l'octet "complet" (255 ou FF) et l'octet "à moitié plein" (128 ou 80) se retrouvent sur les côtés opposés dans chaque résultat. C'est pourquoi vous devez spécifier la constante hexagonale dans l'ordre inverse à partir de ce que vous attendez d'obtenir la même valeur.

De plus, pas besoin d'utiliser un convertisseur en ligne. La fonction hex () fournit la valeur hexagonale du nombre qui lui est donné, et Int prendra une chaîne au format hexadécimal et renvoie la valeur décimale:

? Int("&hff0000") 
 16711680

Mise à jour:

Donc, pour utiliser ces informations pour créer vos constantes hexagonales, vous exécutez simplement vos instructions RGB () et hex () dans la fenêtre immédiate comme ci-dessus (tapez Ctrl + G pour l'ouvrir et la fermer), puis utilisez la valeur hexagonale résultante comme votre constante . Si la valeur est inférieure à 6 chiffres, vous pouvez le remplir à gauche avec des zéros, mais ce n'est techniquement pas nécessaire:

x = RGB(183, 222, 232)
? "Public Const MyBlue = &h" & hex(x)
Public Const MyBlue = &hE8DEB7

Copiez ensuite cette dernière ligne dans votre code.

OK, ce qui suit prendra la couleur d'une cellule dans Excel 2010 et fournira un hexcode valide:

Public Function getHexCol(a As Range)

' In excel type in for example getHexCol(A1) to get the hexcode of the color on     A1.
Dim strColour As String
Dim hexColour As String
Dim nColour As Long
Dim nR As Long, nB As Long, nG As Long

strColour = a.Interior.Color
If Len(strColour) = 0 Then Exit Function

nColour = Val(strColour) ' convert string to decimal number
hexColour = Hex(nColour) ' convert decimal number to hex string
While Len(hexColour) < 6 ' pad on left to 6 hex digits
hexColour = "0" & hexColour
Wend

nB = CLng("&H" & Mid(hexColour, 1, 2))
nG = CLng("&H" & Mid(hexColour, 3, 2))
nR = CLng("&H" & Mid(hexColour, 5, 2))

getHexCol = Hex(RGB(nB, nG, nR))
End Function
Function GetRGB(ByVal cell As Range) As String

Dim R As String, G As String
Dim b As String, hexColor As String
hexCode = Hex(cell.Interior.Color)

'Note the order excel uses for hex is BGR.
b = Val("&H" & Mid(hexCode, 1, 2))
G = Val("&H" & Mid(hexCode, 3, 2))
R = Val("&H" & Mid(hexCode, 5, 2))

GetRGB = R & ":" & G & ":" & b
End Function

Notez que les valeurs RVB Excel sont en arrière (BGR)

J'ai testé ce code, je ne peux pas vraiment suivre la réponse de Howard

Dim rd, gr, bl As Integer
rd = 183
gr = 222
bl = 232
BLUE = RGB(rd, gr, bl)
hexclr = Format(CStr(Hex(rd)), "00") +
Format(CStr(Hex(gr)), "00") + 
Format(CStr(Hex(bl)), "00")
MsgBox hexclr 'B7DEE8
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top