Je cherche à stocker une couleur RVB dans une variable d'un projet VBA Excel afin de définir la couleur d'arrière-plan de différentes cellules/plages d'un sous-marin.
Je souhaite définir la couleur une fois dans une variable, de sorte que si je décide de la modifier en permanence, je n'ai besoin de la faire qu'à un seul endroit.
Cependant, 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, je reçois une erreur d'exécution Object variable or With block variable not set
.
Je sens que je fais quelque chose de fondamentalement faux! Quelqu'un peut-il suggérer ce que c'est? Est-ce faisable?
En écrivant cela, je me rends compte que je pourrais écrire des fonctions distinctes (SetBlue
, SetRed
, SetGreen
) pour appliquer chaque couleur, mais cela semble tout simplement compliqué.
RGB
renvoie une Long
, vous devez donc déclarer clrBlue
comme 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 () renvoie un long, vous devrez donc l'utiliser à la place de ColorFormat. Sur une note quelque peu liée, j'aime beaucoup l'énumération Color en C #, et j'ai commencé à l'imiter dans mes modules VBA. Vous pouvez créer votre propre énumération pour stocker les valeurs de couleurs dans votre projet, puis référencer la couleur avec Color.Blue.
Cela facilite également la modification d'une couleur si vous décidez d'utiliser une nuance de bleu différente. Mettez à jour l'énumération, et tous les emplacements que vous avez utilisés Color.Blue seront mis à 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 RVB à stocker, je viens de jeter la valeur dans la fenêtre Immédiate et de copier le résultat.
Dans la fenêtre immédiate, tapez:
? RGB(112, 149, 219)
La sortie sera 14390640. Il existe peut-être un moyen plus simple d'obtenir la valeur.
Je n'ai pas essayé cela et je ne conteste aucun des précédents commentateurs.
Je remarque que l'exemple de code d'origine a: clrBlue = RGB (0, 0,256)
Le plus grand nombre autorisé en RVB est 255. Cela pourrait être le problème.