MS Access Tips/Sample and VBA and Blog customize etc...

新規入力フォームで前回データを既定値として表示する

現在,定期的に更新する内容のテーブルを使用しています.
各個人の情報の一つなのですが,過去との比較を行うため定期的に更新しているのですが,入力項目を一から入れ直しているのが現状です.

そこで,できることなら、新規レコードを入力する際に,過去の入力を反映させた状態で開くことができれば,変更項目の入力だけで,さらに利便性が得られるように思っております.

AccessClubの掲示板の 新規レコードに古いレコード内容を反映した状態で開く の質問です。

これを実現するには、次の3つのことが必要になります。

  • 前回値(直近の日付のデータ)を取得
  • 新規データを入力するフォーム
  • 開いたときに既定の値を表示する

方法はいろいろ考えられますが、今回は、初心者掲示板用にVBAは最小限のみの使用で実現する方法を考えてみました。

FrmRecentlyValue.png

難易度:

仕様

テーブル構成

<患者基礎情報>
患者ID 主キー
氏名
誕生日
住所
疾患名

<定期評価>
ID 主キー
患者ID
評価日
担当者
結果1
結果2
結果3
結果4
結果5

上記のテーブルからメイン/サブフォーム形式の入力フォームを作成します。サブフォームは新規データ入力用で、メインフォームでレコード移動すると対応する患者さんの今回のデータを新規入力します。そのとき前回のデータが既に表示されていて、修正があった部分のみ修正すればいいようにします。

さらに、入力テキストボックスのとなりに前回値を表示しておいて、どれが変更されたか分かるようにします。変更されたデータは、背景色を変えて一目でわかるようにします。

フォーム設計

メインフォームのレコードソースは、患者基礎情報

サブフォームのレコードソースは、定期評価
「データ入力用」プロパティを「はい」に設定
これで、新規レコードのみの表示になります。

メインフォーム上にサブフォームを配置します。
サブフォームコントロールのリンク親/子フィールドは、患者ID
サブフォームコントロールの名前は、「定期評価サブフォーム」

まず、直近のデータを取得する方法です。

VBAが使えるなら、DAOかADOでレコードセットを日付の降順で開いて先頭レコードを読み込めばいいですが、今回はそれは使わずになんとか取得する方法を考えます。

サブフォーム上にリストボックスを配置して下記のように設定します。

プロパティ 設定値
値集合タイプ テーブル/クエリ
値集合ソース SELECT * FROM 定期評価
WHERE ID In (SELECT Top 1 ID FROM 定期評価 WHERE 患者ID = Parent!患者ID ORDER BY 評価日 DESC);
可視 いいえ
列数 9(実際のテーブルのフィールド数にしてください。)
名前 lst前回値

このリストボックスに直近のデータが入りますので、これをColumnプロパティを使って参照すれば前回値を取得できます。

これを、結果表示のテキストボックスの「既定値」に下記ように設定すれば前回値が表示されます。

結果1  =lst前回値.Column(0,4)
結果2  =lst前回値.Column(0,5)
結果3  =lst前回値.Column(0,6)
・・・・

さらに、結果テキストボックスのとなりに、テキストボックスを配置して名前とコントロールソースを下記のように設定。

前回結果1  =lst前回値.Column(0,4)
前回結果2  =lst前回値.Column(0,5)
前回結果3  =lst前回値.Column(0,6)
・・・・

これで、前回値が表示されるので、新規データ入力後、どこに変化があったのか一目瞭然です。
前回値と変化があった場合は、条件付き書式で背景色を変えるなどするとより分かりやすいでしょう。

例えば、結果1 のテキストボックスの条件付き書式は、
条件
フィールドの値 次の値に等しくない [前回結果1]

これで、メインフォームを開いたときに、サブフォームには新規レコードが表示されて既定値として前回値が表示されます。これで、変化のあったところのみ入力すればOKです。更新したところの背景色が変わります。

最後に、メインフォームでレコードを移動してもサブフォームの前回値は変化しないので、レコード移動時にサブフォームを再計算します。VBAはこの1行だけです。

サンプルMDB が下記からダウンロードできます。
FrmRecentlyValue_07.zip (Access 2007 形式 - 24kb)
FrmRecentlyValue.zip (Access 2002-2003 形式 - 27kb)
FrmRecentlyValue_2k.zip (Access 2000 形式 - 21kb)

拍手する

Leave a reply






Trackbacks

trackback URL
http://hatenachips.blog34.fc2.com/tb.php/249-48214a54
該当の記事は見つかりませんでした。