#392 カレント行全体の背景色を変えてハイライト表示させるには? フォーム、VBA

表形式あるいはデータシート形式のフォームにおいて、現在カーソルがある行、すなわちカレント行全体の背景色を他の行とは別の色に設定して、ハイライト表示させる方法です。ここでは、詳細セクションに配置されたすべてのコントロールについて、条件付き書式の条件式を行ごとに動的に変更することによって、その動作を実現します。

具体的には、『その行を一意に識別する主キーフィールドの値がそのレコードの値と同じだったら』という条件式をレコードごとに設定します。少し分かりづらい表現かもしれませんが、たとえば"得意先コード"が主キーフィールドで、1行目のその値が「10」だったとします。そのとき、「得意先コード = 10」という条件付き書式を設定すれば、必ずそのレコードだけがその条件に一致しますので、結果的にそのレコードだけにその書式が適用され、その行だけをハイライト表示させることができるわけです。

この処理を行うためには、次のようなイベントプロシージャを記述します。

Private Sub Form_Current()
'レコード移動時

  Dim avarContorol() As Variant
  Dim iintLoop As Integer

  'このフォーム内の対象コントロールを配列に設定
  avarContorol = Array("得意先コード", "得意先名", "郵便番号", "都道府県", "住所1")

  'すべての対象コントロールのループ
  For iintLoop = 0 To UBound(avarContorol)
    With Me(avarContorol(iintLoop)).FormatConditions
      '既存の条件付き書式を削除
      .Delete
      '新しい条件付き書式を追加
      ' (得意先コードがカレント行の得意先コードと等しいときの条件を設定)
      With .Add(acExpression, , "[得意先コード] = " & Me!得意先コード)
        '背景色を設定
        .BackColor = 52377
        'フォントを太字に設定
        .FontBold = True
      End With
    End With
  Next iintLoop

End Sub


実行例:
フォームビューでの実行結果
このとき、得意先コードの値は「1」なので、カレント行のみが「"[得意先コード] = " & Me!得意先コード」、つまり「[得意先コード] = 1」という条件式が真となり、上記の条件付き書式が適用され、この行の各コントロールの書式が変更されます。

フォームビューでの実行結果
このとき、得意先コードの値は「6」なので、「[得意先コード] = 6」という条件式が真となり、上記の条件付き書式が適用されます。
| Index | Prev | Next |



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