VBA stocke la couleur RVB En variable
je cherche à stocker une couleur RVB dans une variable D'un projet Excel VBA, pour être utilisé pour définir la couleur de fond de diverses cellules/gammes à travers un sub.
je veux régler la couleur une fois dans une variable, de sorte que si je décide de la changer tout au long, je n'ai besoin de le faire qu'à un seul endroit.
mais ma tentative ci-dessous ne fonctionne pas:
Dim clrBlue As ColorFormat
clrBlue = RGB(0, 0, 256)
Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue
avec le code ci-dessus, j'obtiens un Object variable or With block variable not set
erreur d'exécution.
je sens que je suis en train de faire quelque chose fondamentalement mauvais! Quelqu'un peut-il suggérer ce que c'est? Cela peut-il être fait?
En l'écrivant je me rends compte que je pourrais écrire des fonctions distinctes (SetBlue
, SetRed
,SetGreen
) pour appliquer chaque couleur, mais ça sent juste le désordre.
3 réponses
RGB
retourne un Long
, donc vous devez déclarer clrBlue
Long
au lieu de ColorFormat
.
Dim clrBlue As Long
clrBlue = RGB(0, 0, 256)
Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
comme d'autres l'ont dit, RGB() retourne un Long, donc vous devrez utiliser cela au lieu de ColorFormat. Sur une note un peu apparentée, j'aime vraiment la couleur enum en C#, et j'ai commencé à imiter cela dans mes modules VBA. Vous pouvez créer votre propre enum pour stocker les valeurs des couleurs dans votre projet, puis référence la couleur avec la couleur.Bleu.
Cela rend également très facile de modifier une couleur, si vous décidez d'aller avec une autre nuance de bleu. Mettre à jour l'enum, et tous les endroits que vous avez Couleur utilisée.Le bleu se mettra à jour.
Exemple:
Public Enum Color
Black = 0 'RGB(0, 0, 0)
Blue = 14390640 'RGB(112, 149, 219)
Gray = 11842740 'RGB(180, 180, 180)
Red = 6118894 'RGB(238, 93, 93)
White = 16777215 'RGB(255, 255, 255)
End Enum
pour obtenir la valeur longue de la valeur RGB à stocker, j'ai juste jeté la valeur dans la fenêtre immédiate et j'ai copié la sortie.
dans la fenêtre immédiate, tapez:
? RGB(112, 149, 219)
La sortie sera 14390640. Il pourrait y avoir un moyen plus facile d'obtenir de la valeur.
Je n'ai pas essayé et je ne conteste aucun des commentaires précédents.
je remarque que le code d'origine de l'échantillon a: clrBlue = RGB(0, 0, 256)
le plus grand nombre autorisé en RGB est 255. Que pourrait être le problème.