カレントレコードの背景色を変えて強調する

f:id:accs2014:20170805173312p:plain:right:w400

 フォームの条件付き書式の条件には「フォーカスのあるフィールド」というのがありますが、これを適用しても書式が変更されるのはフォーカスのあるフィールドのみです。
 そうではなく、カレントレコード(となっている詳細セクション)の全体の色を変えて強調したいという場合の設定です。
 なかなか面倒なうえにちょっと反応が重いのでご注意ください;-o-)


方法1:特定の列(主キー)の値により行を特定する方法

f:id:accs2014:20170805180325p:plain:right:w400

 行を特定するための列(通常は主キー)が存在する場合の設定です。結果は冒頭に示した画像のようになります。
 なお、この例において行を特定するための列というのは「都道府県番号」です。

 まず普通に各種テキストボックスを配置していきます。
 次に、フォームヘッダまたはフォームフッタに非連結のテキストボックスを置きます。名前は「カレント都道府県番号」としておきます。画面に表示する必要はありませんので「可視」を「いいえ」とします。
 また、詳細セクション一杯に非連結のテキストボックスを配置し、とりあえず最背面に配置します。背景色を変える、というのはこのテキストボックスの背景色を変更することにより実現します。なお、このテキストボックスに名前は付けなくてもいいですが、以下では「背景色用テキストボックス」と呼びます。


f:id:accs2014:20170805173305p:plain:right:w300

 次に、フォームモジュールに下記のイベントプロシージャを設定します。これにより行(レコード)を移動するたびに移動先の行の都道府県番号が「カレント都道府県番号」に転記されます。



Private Sub Form_Current()

Me.カレント都道府県番号 = Me.都道府県番号

End Sub


f:id:accs2014:20170805173302p:plain:right:w400

 次に、背景色用テキストボックスに条件付き書式を設定します。
 いずれも「式」を設定対象として、下記の2つの条件を設定し、その時の背景色が黄色になるよう設定します。

Nz([都道府県番号],"")=Nz([カレント都道府県番号],"")
[Dirty]=True

 Nz関数は新規レコードを選択した時も背景色をつけるためのものです。
 「[Dirty]=True」は入力中の新規レコードにも背景色をつけるためのものです。
 ただし新規レコードへの入力中には、”入力中の新規レコード”と”さらに現れる新規レコード”の2つの行がどちらも黄色になりますスミマセン;-o-)


 さて、これで設定は済んだように見えますがここからが本番です。
 背景色用テキストボックスがフォーカスをゲットしてしまうとフォームは使い物になりませんので、それを回避する必要があります。
 そこで、下記の設定を行ってください。

  • 背景色用テキストボックスの「タブストップ」を「いいえ」にする。
  • 詳細セクションを広げて空所にコマンドボタンを設置し、背景色用テキストボックスと同じ大きさにし、「透明」を「はい」に、「使用可能」を「いいえ」に、「タブストップ」を「いいえ」にする。
     これを通常のテキストボックス(「都道府県番号」「都道府県名」「面積」)より奥に、ただし背景色用テキストボックスより手前に配置する。
     これを背景色用テキストボックスと重ね合わせ、詳細セクションを元の大きさに戻す。
  • タブオーダーを、通常のテキストボックス→コマンドボタン→背景色用テキストボックスの順にする。

 若干冗長な設定があるかもしれませんがご容赦を。

方法2:Bookmarkプロパティにより行を特定する方法

f:id:accs2014:20170805203040p:plain:right:w400

 フォームの行を特定するプロパティであるBookmarkプロパティを利用する方法です。
 設定はわずかに面倒ですが、全く区別がつかない同一のレコードが複数存在する場合でも適用できるという特長があります。

 まず普通に各種テキストボックスを配置していきます。
 次に、フォームヘッダまたはフォームフッタに非連結のテキストボックスを置きます。名前は「カレントブックマーク」としておきます。画面に表示する必要はありませんので「可視」を「いいえ」とします。
 また、詳細セクション一杯に非連結のテキストボックスを配置し、とりあえず最背面に配置します。最初の例と同様に、背景色の変更はこのテキストボックスの背景色を変更することにより実現します。このテキストボックスに名前は付けなくてもいいですが、以下では「背景色用テキストボックス」と呼びます。


f:id:accs2014:20170805203037p:plain:right:w300

 次に、フォームモジュールに下記のイベントプロシージャを設定します。これにより行(レコード)を移動するたびに移動先の行のBookmarkプロパティが「カレントブックマーク」に転記されます。



Private Sub Form_Current()

    If Me.NewRecord = True Then
    Me.カレントブックマーク = Null
    Else
    Me.カレントブックマーク = Me.Bookmark
    End If
    
End Sub


f:id:accs2014:20170805205537p:plain:right:w400

 次に、背景色用テキストボックスに、条件付き書式を設定します。
 いずれも「式」を設定対象として、下記の3つの条件を設定し、その時の背景色が黄色になるよう設定します。

[Bookmark]=[カレントブックマーク]
IsError([Bookmark])=True And [NewRecord]=True
[Dirty]=True

 「IsError~」は新規レコードを選択した時も背景色をつけるためのものです。
 「[Dirty]=True」は入力中の新規レコードにも背景色をつけるためのものです。
 ただし新規レコードへの入力中には、”入力中の新規レコード”と”さらに現れる新規レコード”の2つの行がどちらも黄色になります。


 あとは背景色用テキストボックスがフォーカスをゲットするのを防ぐため下記の設定を行ってください。
 (以下は上記の方法1と全く同じです)

  • 背景色用テキストボックスの「タブストップ」を「いいえ」にする。
  • 詳細セクションを広げて空所にコマンドボタンを設置し、背景色用テキストボックスと同じ大きさにし、「透明」を「はい」に、「使用可能」を「いいえ」に、「タブストップ」を「いいえ」にする。
     これを通常のテキストボックス(「都道府県番号」「都道府県名」「面積」)より奥に、ただし背景色用テキストボックスより手前に配置する。
     これを背景色用テキストボックスと重ね合わせ、詳細セクションを元の大きさに戻す。
  • タブオーダーを、通常のテキストボックス→コマンドボタン→背景色用テキストボックスの順にする。


f:id:accs2014:20170805203031p:plain:right:w400

 フォームビューの様子です。
 このフォームのレコードソースとなっているテーブルには「苗字」以外の列がなく、同じ値が記録されていると行の区別がつけられませんが、それでも選択した行だけが強調されています。