#417 データシートの列の背景色を動的に切り替える方法 フォーム、VBA

Accessの条件付き書式の機能は、本来、データ値などの条件に応じて動的にセルの文字色や背景色を変えるためのものですが、データシートビューにおいて、動的にある列全体の書式を変えることもできます。

次のサンプルコードでは、「fra背景色切り替え」という名前のオプショングループの選択を切り替えると、それに応じて、Me!frm仕入先_subサブフォーム内のその列全体の背景色を緑色に変更しています。また、このオプショングループ内には、オプション値プロパティが1〜5の5つのオプションボタンが配置されています。

Private Sub fra背景色切り替え_AfterUpdate()
'背景色切り替えオプショングループの更新後処理

  Dim iintLoop As Integer

  'サブフォームの列数
  Const cintColMax As Integer = 5

  'サブフォーム内のすべての列のループ
  For iintLoop = 1 To cintColMax
    '対象コントロールを設定(コントロール番号は0から始まるので-1する)
    With Me!frm仕入先_sub.Controls(iintLoop - 1)
      If iintLoop = Me!fra背景色切り替え Then
        '列番号がオプショングループの選択値のとき
        With .FormatConditions
          '新しい条件付き書式を追加
          With .Add(acExpression, , "[仕入先コード] > 0")
            '背景色を設定
            .BackColor = vbGreen
          End With
        End With
      Else
        'オプショングループで選択外のコントロールの条件付き書式を削除
        If .FormatConditions.Count > 0 Then
          'ここでは条件が1つだけとしてFormatConditions(0)を削除
          .FormatConditions(0).Delete
        End If
      End If
    End With
  Next iintLoop

End Sub


実行結果:
実行結果
実行結果
実行結果

※このサンプルでは、コードをシンプルにするために、ループですべてのコントロールの条件付き書式を設定したり削除したりしています。Controls(0)、Controls(1)・・・・・で示されれる実際のコントロールは、フォームのデザイン作業において、フォームに挿入された順番になり、見た目の配置順とは違ってしまう場合があることに注意してください。

※「[仕入先コード] > 0」で表記された条件は、実際のフォームのデータによって替える必要があります。指定列の全レコードの背景色を設定するためには、その列の全レコードのデータが真となる条件をここに指定する必要があります。

※もし、サブフォームのデータが「月別売上実績数」のような1月・2月・3月・・・・・のような列を持っているとすれば、フォーム読み込み時イベントプロシージャに上記のコードを展開することによって、"カレンダ上の現在月の列だけに特別な背景色を付ける"といったこともできます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved