サブルーチン全体のさまざまなセル/範囲の背景色を設定するために使用するために、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
ランタイムエラー。
私は根本的に間違ったことをしていると感じています!誰でもそれが何であるかを提案できますか?これもできますか?
これを書く際に、各色を適用するために別々の関数(SetBlue
、SetRed
、SetGreen
)を書くことができることに気づきましたが、それは面倒です。
RGB
はLong
を返すので、clrBlue
をLong
ではなくColorFormat
として宣言する必要があります。
Dim clrBlue As Long
clrBlue = RGB(0, 0, 256)
Application.union(Range("A2"), Range("B3")).Interior.Color = clrBlue
他の人が言ったように、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になります。値を取得する簡単な方法があるかもしれません。
私はこれを試したことはありませんし、以前のコメンターのいずれにも異議を唱えていません。
元のコードサンプルには、clrBlue = RGB(0、0、256)があります。
RGBで許可される最大数は255です。これが問題の可能性があります。