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.

10
demandé sur Community 2014-08-08 14:16:36

3 réponses

RGB retourne un Long, donc vous devez déclarer clrBlueLong au lieu de ColorFormat.

Dim clrBlue As Long

clrBlue = RGB(0, 0, 256)

Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
24
répondu Tom 2014-08-14 09:35:24

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.

5
répondu Eric Harlan 2014-08-08 13:44:59

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.

0
répondu RIck_R 2017-12-07 18:34:06