web-dev-qa-db-fra.com

Couleur RVB VBA Store en variable

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é. 

10
Jonny

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
25
Tom

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.

7
Eric Harlan

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.

1
RIck_R