web-dev-qa-db-ja.com

VBAは変数にRGBカラーを保存します

サブルーチン全体のさまざまなセル/範囲の背景色を設定するために使用するために、Excel VBAプロジェクトの変数にRGB色を保存しようとしています。

変数に一度色を設定したいので、全体を通して色を変更することにした場合は、1か所で行うだけで済みます。

しかし、以下の私の試みは機能していません:

Dim clrBlue As ColorFormat
clrBlue = RGB(0, 0, 256)

Range("a2").Interior.Color = clrBlue
Range("b3").Interior.Color = clrBlue

上記のコードでは、Object variable or With block variable not set ランタイムエラー。

私は根本的に間違ったことをしていると感じています!誰でもそれが何であるかを提案できますか?これもできますか?

これを書く際に、各色を適用するために別々の関数(SetBlueSetRedSetGreen)を書くことができることに気づきましたが、それは面倒です。

14
Jonny

RGBLongを返すので、clrBlueLongではなくColorFormatとして宣言する必要があります。

Dim clrBlue As Long

clrBlue = RGB(0, 0, 256)

Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
32
Tom

他の人が言ったように、RGB()はLongを返すので、ColorFormatの代わりにそれを使用する必要があります。多少関連する注意として、私はC#のColor列挙型が大好きで、VBAモジュールでそれを模倣し始めました。独自の列挙を作成してプロジェクトの色の値を保存し、Color.Blueで色を参照できます。

また、これにより、異なる青の色合いを使用することにした場合に、色を簡単に変更できます。列挙型を更新すると、Color.Blueを使用したすべての場所が更新されます。

例:

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

格納するRGB値の長い値を取得するには、値をイミディエイトウィンドウに投げて出力をコピーしました。

イミディエイトウィンドウで、次を入力します。

? RGB(112, 149, 219)

出力は14390640になります。値を取得する簡単な方法があるかもしれません。

10
Eric Harlan

私はこれを試したことはありませんし、以前のコメンターのいずれにも異議を唱えていません。

元のコードサンプルには、clrBlue = RGB(0、0、256)があります。

RGBで許可される最大数は255です。これが問題の可能性があります。

1
RIck_R