ACCESS VBA Backcolorプロパティで背景色を変える方法
ACCESSのフォームで、条件に応じてテキストボックスなどの背景色を変更したい際には、VBAの処理で変更が可能です。
この際に利用するのが、Backcolorプロパティです。
今回は、Backcolorプロパティで背景色を変える方法をご紹介します。
こんにちは。
はこにわガジェット (@hakoniwagadget) です。
ACCESSを使った売上管理、顧客管理などのデータベース開発を行っています。
ACCESSは使いこなすために少しスキルが必要なものの、うまく活用すればExcelよりも業務の効率化が図れます。
この記事ではACCESSをもっと使いこなしたい方向けにACCESSの関数をご紹介していきます。
目次
Backcolorプロパティとは
Backcolorプロパティとは、ACCESSのVBAでフォームやレポートの背景色を指定するためのプロパティです。
以下の構文で利用します。
フォーム名.BackColor = RGB( R , G , B)
右辺のRGB( R , G , B)の部分に様々な色を設定することで、背景色を自由に変更することが可能です。
例えば、水色に変更したい場合は以下のように設定します。
まずは色を指定する数値を知らなければいけません。
フォームをデザインビューで開き、プロパティシートの「背景色」で一番右の…ボタンを押してみましょう。

色の指定ダイアログボックスが表示されます。

ここで「ユーザー設定」タブを選択し、利用したい色を選びましょう。
すると、指定した色の赤(R)、緑(G)、青(B)の数値を知ることができます。
今回指定した水色の場合は、これをもとにBackcolorプロパティの右辺には
RGB(102, 255, 255)
と指定すればよいのです。
なお、Backcolorプロパティの値は必ずRGBで指定する必要があることに注意してください。
例えば先ほどの背景色をACCESSのデザインビューで設定すると、プロパティシートの「背景色」には以下のように表示されます。

#66FFFFと表示されています。
これは16進数で色を表現したカラーコードです。
ACCESSのデザインビューではこの16進数カラーコードが使われていますが、これはBackcolorプロパティに使用することができません。
設定しようとするとエラーになってしまいますので、必ずRGBで指定するよう注意してください。
Backcolorプロパティ利用例:コンボボックスの入力値に応じて、背景色を変える
では、Backcolorプロパティの利用例として、コンボボックスの入力値に応じて、背景色を変える機能を作成してみます。
今回は以下のようなフォームを準備しました。

担当をコンボボックスで選択します。
コンボボックスで選択した際に、だれを選んだかによって背景色が変わるようにします。
まずはフォームをデザインビューで見てみましょう。

担当コンボボックスには、値集合ソースとしてMST_担当というテーブルが設定されており、連結列は1になっています。
MST_担当テーブルの内容は以下の通りです。

連結列が1となってますので、NST_担当テーブルの1列目でる担当IDがコンボボックスには値として格納されます。
では、VBAのプロシージャを設定します。
担当コンボボックスの更新後イベントにイベントプロシージャを設定しましょう。

設定する内容は以下の通りです。
Private Sub 担当_AfterUpdate()
Select Case Me!担当
Case 1
Me!担当.BackColor = RGB(102, 255, 255)
Case 2
Me!担当.BackColor = RGB(255, 255, 102)
Case Else
Me!担当.BackColor = RGB(255, 102, 255)
End Select
End Sub
Select Caseを使って、担当コンボボックスの値に応じてBackcolorを変えています。
BackcolorにはRGBで色を指定しています。
実際にフォームビューで動かしてみましょう。

このように、コンボボックスで選択した値に応じて色が変わることがわかります。
テーブルの値を参照して背景色を変える方法
上記の例ではVBAで割り当てる色を指定しました。
しかし、実務ではこの実装方法は課題があります。
それは、色を変えたい場合にVBA自体を書き換えなければいけないという点です。
運用を考えるとできる限り色の指定はテーブルで行うのが望ましいでしょう。
そこで、テーブルの値を参照して背景色を変える方法をご紹介します。
まず、MST_担当テーブルをデザインビューで開き、R、G、Bという3つのフィールドを数値型で追加します。

テーブルには表示したい色をR、G、Bの値に分解して入力しておきます。

その上で、フォームに戻り、担当コンボボックスの更新後イベントのイベントプロシージャを以下のように設定します。
Private Sub 担当_AfterUpdate()
Me!担当.BackColor = RGB(DLookup("R", "MST_担当", "担当ID = " & Me!担当), DLookup("G", "MST_担当", "担当ID = " & Me!担当), DLookup("B", "MST_担当", "担当ID = " & Me!担当))
End Sub
DLookup関数を使って、フォームで選択した担当IDに対応するR、G、Bの値をMST_担当テーブルから呼び出し、RGB関数を使って色を設定する、という処理です。
テーブルの値を使って色を変更する場合は、この方法でないとうまくいきませんのでご注意ください。
Backcolorプロパティの注意点
最後に少し蛇足ですが、Backcolorプロパティの注意点をご紹介します。
色の指定方法に関わる部分です。
今回はテーブルにR、G、Bの3つのフィールドを作成して値を入れています。
これは少し煩雑です。そのため、もっと他の方法がないかと思うと思いますが、実はこれが最も現実的な方法なのです。
以下で他の方法ではうまくいかない理由を説明します。
RGBの値をテキストで格納
まず、RGBを分割するのが面倒なので、テキスト型のフィールドを1つ作成して、RGB(102, 255, 255)と入力すればよいのでは、と思うかもしれません。
しかし、この設定ではうまく動作しません。
その理由は、Backcolorプロパティには数値型の値しか格納できないためです。
実際に設定すると「型が一致しません」というエラーが出てしまいます。
カラーコードを数値で指定
では、数値型ということでカラーコードを設定してはどうかというと、それもうまくいきません。
まず、カラーコードは16進数(例えば#66FFFF)ですので、これを10進数の数値に変換する必要があります。
この10進数の数値であればBackcolorプロパティに格納可能なのですが、実はACCESSのカラーコードが特殊なために指定した色にならないのです。
例えば、ACCESSで#66FFFFを指定すると以下の水色になります。

これを10進数に変換すると6750207です。
そこで、Backcolorプロパティに6750207を指定すると以下のように黄色になってしまうのです。

上記のように様々な手法で試してもうまくいかないため、ACCESSのBackcolorプロパティの値をテーブルで可変させる際は、RGBの値を分解してテーブルに数値型で格納し、それぞれをDlookup関数で呼び出してRBG関数でカラーコードに変換するという方法が一番楽だと思います。
以上、Backcolorプロパティで背景色を変える方法をご紹介しました。
ACCESSを使いこなせば、業務の効率化や自動化が実現できます。
しかし、自分でACCESSを学ぶには時間がない、難しそうで不安、という方も多いでしょう。
そんな時は、ACCESS開発歴20年以上、過去に200以上のACCESSデータベースの開発・修正実績のあるはこにわガジェット(@hakoniwagadget)にお任せください。
ACCESSの新規開発、既存のACCESSの修正、ACCESSの操作レッスンなど様々なサービスをご提供しています。
ご興味のある方は下記のサービス一覧をご覧ください。

最後までお読みいただき、ありがとうございました。