表形式あるいはデータシート形式のフォームにおいて、現在カーソルがある行、すなわちカレント行全体の背景色を他の行とは別の色に設定して、ハイライト表示させる方法です。ここでは、詳細セクションに配置されたすべてのコントロールについて、条件付き書式の条件式を行ごとに動的に変更することによって、その動作を実現します。
具体的には、『その行を一意に識別する主キーフィールドの値がそのレコードの値と同じだったら』という条件式をレコードごとに設定します。少し分かりづらい表現かもしれませんが、たとえば"得意先コード"が主キーフィールドで、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」という条件式が真となり、上記の条件付き書式が適用されます。 |