• 解説

    コントロールの背景色を変更しようとすると背景色(BackColor)プロパティを変更する方法が一番簡単です。

    しかし、この方法を使用し帳票フォームの詳細セクションにあるコントロールの背景色を変更すると、すべての行のコントロールが変更されてしまいます。

    理由は、Accessの帳票フォームの詳細セクションにあるコントロールは複数あるように見えて実はひとつしかないためです。
    (デザインビューを見るとよく分かりますね)

    コントロールが複数無くてもコントロールにリンクされたテーブルの数字や文字などデータは表示することができます。
    代入してもカレントレコード(最後にカーソルのあったレコード)に値を設定できます。

    この複数のコントロールが無くてもデータは表示できる機能を利用して明細行に色をつけます。

    データを使用して色をつけるためにはコントロールいっぱいに表示できるデータが必要です。
    これは一般的な数値型文字列型のデータ型には向いていません。かわりに、OLEオブジェクト型というデータ型を使用します。

    テーブルにOLEオブジェクト型のフィールドを作成し、フィールドの値に色のついたビットマップを保存し、フォームのコントロールにリンクし通常の数値型文字列型のデータと同様にビットマップを表示します。

  • 手順

    1. 新規にテーブルを作成しIDとなるフィールドとOLEオブジェクト型のフィールドを作成します。
    2. [No.1]で作成したテーブルのIDには任意の値を入れ、OLEオブジェクトには色のついたビットマップを保存します。
    3. フォームのレコードソースとなるテーブルに[No.1]で作成したテーブルのIDにリンクするフィールドを追加します。
    4. フォームのレコードソースに[No.3]と[No.1]のテーブルをIDをリンクした状態のSQLもしくはクエリーをセットします。
    5. フォームの[詳細]にある、色を変更したいコントロールの背景を透明にします。
    6. [No.5]のコントロールの後ろに(最背面)に連結オブジェクトコントロールを作成します。
    7. [No.1]で作成したOLEオブジェクト型のフィールドを[No.5]で作成したコントロールにリンクします。
  • その他

    これを応用するとコントロールごとに色を変更できるのでExcelのような個々のセルの色を変更するようなことができます。
    (サンプル参照)

    ※[No.3]のテーブルのIDとなるフィールドの値を動的に変更すると何かの動作の際に色を変更することができます。動的に値を変更したときはRequeryメソッドを忘れずに。

説明がわからないなどありましたらお問い合わせでお知らせください。

ここに掲載された情報を使用したことによって発生した、いかなる損害に対しても
管理者である雅は一切責任を負いません。