選択中のレコードの行背景色を変える方法
Accessのレコードの一覧を表示するようなフォームで、選択中のレコードの行背景色を分かりやすくするために変更したい場合があります。
簡単にできそうな内容ですが、Accessの場合は意外と苦労するので、メモとして残しておきます。
目次
- 完成イメージ
- 画面の構成
- 詳細セクション内の項目
- 選択中レコードのIDを保持する非連結のテキストボックス
- 条件付き書式ルールの追加
- VBAコードの追加
- 実行結果
完成イメージ
選択中のレコードの背景色を変更するイメージは以下の通り。
今回は処理を分かりやすくするために、一覧部分にサブフォームは使っていません(検索画面の場合はサブフォームを使った方が見栄えがよく、機能的にもいいので普通はサブフォームを使います)。
画面の構成
先ほどの完成イメージをデザインビューで開きます。
この中で重要なのは、「詳細セクション内の項目」と編集ボタン横の「選択中レコードのIDを保持する非連結のテキストボックス」になります。
ちなみにフォームの既定のビューは「帳票フォーム」です。
以下、各々の詳細と作成の手順を示します。
詳細セクション内の項目
詳細セクション(繰り返し部)のコントロールは、大きく分けて以下のパーツに分かれます。
- 選択したレコードの背景色を設定する非連結のテキストボックス
- 背景色用テキストボックスにカーソルを合わせないためのコマンドボタン(テキストボックスの上に被せる)
- 上記以外の一覧に表示したいコントロール
選択したレコードの背景色を設定するテキストボックスは以下の通り。
※ 分かりやすいように各パーツを本来の位置からずらしています。
背景色用テキストボックス(名前:txt背景色)のプロパティに、境界線スタイル「透明」、使用可能「いいえ」、編集ロック「はい」、タブストップ「いいえ」を設定します。
次に背景色を設定したテキストボックスだけだと、テキストボックスのエリアをクリックした際に、上に置いたコントロールよりも前に表示されてしまうので、そうならないように透明にしたコマンドボタンを配置します。
プロパティの値は、透明「はい」を設定するだけで、後は背景色用のテキストボックスがすべて隠れるように広げます。
最後に一覧に表示したい項目のコントロール(テキストボックスなど)を配置します。
表示位置は後ろから「①背景色用テキストボックス」「②背景色用テキストボックスを覆うコマンドボタン」「③項目表示用のコントロール」の順番になります。
②、①の順に「最背面に移動」を指定すると、上記の順番通りになるかと思います。
選択中レコードのIDを保持する非連結のテキストボックス
続いて、編集ボタンの横にある非連結テキストボックスについてですが、これは現在選択中のレコードのID(レコードを一意に特定する番号)を保存するコントロールになります。
コントロール名はここでは「txtカレント商品ID」とし、裏で保持しておけばいい項目なので、プロパティに、可視「いいえ」を設定します。
条件付き書式ルールの追加
上記のコントロールを用意したら、今度は詳細セクション内の背景色用テキストボックスに条件付き書式ルールを追加します。
メニューから「書式 > 条件付き書式」を選択し、
条件付き書式ルールの管理画面が表示されるので、書式ルールの表示欄で背景色用テキストボックス(txt背景色)を選択して、「新しいルール」ボタンを押します。
書式ルールの設定画面で、ルールの種類と内容を以下のように設定して保存します。
[txtカレント商品ID]=[txtID]
「txtID」は詳細セクション内の商品IDを表示するテキストボックスになります。
VBAコードの追加
最後にフォームのイベント「レコード移動時」にVBAを実行するようにします。
コードは以下の通り。
Private Sub Form_Current()
[txtカレント商品ID] = [txtID]
End Sub
上記のコードを追加することで、選択中のレコードが切り替わる度に「txtカレント商品ID」に選択中の商品IDが保存されるようになります。
実行結果
以上の設定で、最初に見てもらった完成イメージのような動作が実現します。
一覧部分をサブフォームで実現する場合も、基本的には上記と同じような対応で実装可能です。
このようにAccessで選択行の色を変えるのは意外と面倒なので、対応する場合は、本当に必要かどうか、または優先順位など、そういったことを考慮してから実装するのがいいと思います。