• ベストアンサー

アクセスのフォームで当該レコードの変更したデータの背景色を変更したい

こんにちは。 アクセスで教えていただきたいのですが、顧客からの受領データを基に当方で入力をするのですが、その際、受領データを一部変更することがあります。そこで、データを変更した場合、backcolorを変更するなど、変更したことが分かるようにしたいのですが、何か方法はないでしょうか。ダーティ時のバックカラーの変更でやってみたのですが、全てのレコードのプロパティが変更になってしまいました。データを変更したレコードのみ変更したいのですが。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#1です では、次に簡単な方法になります。 条件付き書式を使うことには変わりはありません。 処理で各テキストボックスの Tag を使用します。 この Tag には格納できる文字数に制限があるので注意してください。 連結して表示しているテキストボックスの名前が以下であると仮定します。 "an","日付", "品番ID", "設備ID", "売上", "生産数" そのレコードを一意に特定できるものが "an" であるとします。 (確認した時の an はオートナンバー) 各テキストボックスの Tag には、変更があった時の an を格納していきます。 an = 1 の "日付" に変更があったら、テキストボックス "日付" の Tag に ,1 を、 さらに an = 2 の "日付" に変更があったら、,1,2 の様に追加していきます。 で、この "日付" の条件付き書式には、 [日付].[OldValue]<>[日付] Or InStr([日付].[Tag] & ",","," & [an] & ",")>0 前回の条件に、Or InStr([日付].[Tag] & ",","," & [an] & ",")>0 を追加しています。 Tag が、,1,2 だったら、,1,2, に加工して、[an] を , , で囲んだパターンがあるか、で判別します。 この Tag を作成するのは、フォームの「更新前処理」で行います。 Private Sub Form_BeforeUpdate(Cancel As Integer)   Dim vFld As Variant   Dim vTmp As Variant   Const FIXAN As String = "an"   If (Not Me.NewRecord) Then     vFld = Array("日付", "品番ID", "設備ID", "売上", "生産数")     For Each vTmp In vFld       With Me(vTmp)         If (.Value <> .OldValue) Then           .Tag = .Tag & "," & Me(FIXAN)         End If       End With     Next   End If End Sub ※ 今回の例では、一意のものがオートナンバーなので、新規登録の更新前処理で確定していない(?)ため処理から外してます。 新規登録時も色付けするのなら、更新後処理と連携して作る必要があります。 (更新前処理では新規であるか Me.NewRecord で判別できますが、更新後処理ではできなかったか、と) ※ Tag の文字数制限に引っ掛かるのなら、 "日付", "品番ID", "設備ID", "売上", "生産数" らの影武者をヘッダーに配置して Tag 部分の処理を、その影武者に設定すればよいと思います。 もちろん、非表示にしておききます。 影武者の名前先頭に「tk」を付けたとすると .Tag = .Tag & "," & Me(FIXAN) は Me("tk" & vTmp) = Me("tk" & vTmp) & "," & Me(FIXAN) Or InStr([日付].[Tag] & ",","," & [an] & ",")>0 は Or InStr([tk日付] & ",","," & [an] & ",")>0 で大丈夫と思います。 Tag では確認しましたが、影武者では未検証 ※ 一度変更し、確定させ、さらに1つ前に戻しても色は付いたままになります。 (これは変更が2回行われたものになるので) ( ,1 は、,1,1 になりますが判別には影響ありません:文字数の制限に・・・) ※必要であれば、読み込み時等で Tag 部分を初期化します。 使える方法かは、判断してください。

ysr-ad
質問者

お礼

30246kiku様 非常に丁寧なご回答有難うございました。 サンプルを試してみましたが、非常に良い感じです。 私はVBA初心者なのでこの内容を自身のDBに上手く投影できるかどうか不安ですがなんとかチャレンジしてみます。 私は教えて!gooを初めて投稿したのですが、このように非常に早く丁寧なご回答を戴き誠に感謝しております。

その他の回答 (2)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

#2です > "日付", "品番ID", "設備ID", "売上", "生産数" らの影武者をヘッダーに配置して 表現が適切ではなかったと思います。 それぞれに対応させる非連結のテキストボックスをヘッダーに配置して "tk日付", "tk品番ID", "tk設備ID", "tk売上", "tk生産数" の様に名前付けする ということです。 いまだにこの方法は未検証です。 (多分、大丈夫かと)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> データを変更したレコードのみ変更したいのですが レコードが更新確定された時には、色は消えてもいいのでしょうか。 (その方が簡単なのですが) 項目を変更している部分だけ色を付けて、確定後は色が消えるということで、 以下例) 条件付き書式を使用します。 1つのテキストボックスのみの例としますので、他にあれば同様な設定をしてください。 連結したテキストボックス名を「txt日付」、そのコントロールソースは「日付」と仮定します。 デザイン画面で、テキストボックス「txt日付」をクリック後、条件付き書式を、 条件部分を「式」として、 [txt日付].[OldValue]<>[txt日付] を記述後、背景色を選びます。 で、OK ボタン。 ここの条件付き書式の設定を必要数分行います。 (それぞれのテキストボックス名に置き換えながら) 最後に、フォームの「更新後処理」で、フォームを再計算させます。 Private Sub Form_AfterUpdate()   Me.Recalc End Sub これで、修正したら色が付きます。確定したら色は消えます。 なお、新規登録時には色は付きません。

ysr-ad
質問者

お礼

早速のご回答ありがとうございます。 実行して上手くいきましたが、更新確定すると色は消えてしまいますね。 出来れば、ずっとこの状態を保っておきたいのですが難しいでしょうか?

関連するQ&A

  • Access2003で、フォーム画面でデータを入力すると、他のレコード

    Access2003で、フォーム画面でデータを入力すると、他のレコードの同じフィールドが全て同じデータになってしまいます。 変更すると、同じ様に全てのレコードのデータが変更されてしまいます。 1件1件別のデータを入力出来る様にするにはどうしたら良いでしょうか? どなたか教えて下さい。 宜しくお願いしますm(_ _)m

  • Accessでフォーム上に 直前の データを表示させるには

    Accessでフォーム上で、データを入力するのに、一つ前のレコードの データを基参考に 次のデータを入力したいと思います。一つ前のレコードを そのフォーム上に表示させるには どうすれば良いのでしょうか? あるレコードのすべてのフィールドの値を表示させたいのです。

  • アクセス2000のフォームについて

    アクセスでまたつまずいてしまいました。ちょっと教えてください。 複数のテーブルから選択クエリを作り、それを基にオートフォームでフォームを作ったのですが、フォームでデータの入力が出来ません。クエリでもデータの入力が出来ません。 「このレコードセットは更新できません」と下のほうに出ます。 フォームのプロパティのデータの更新の許可と、データ入力用のところは“はい”になっています。 私では原因がわかりません。わかりにくい質問でしょうが、どなたかご指導お願いします。

  • ACCESSで、フォームのレコードごとに背景色変更

    OS:Windows XP Access Version: ACCESS 2000 ACCESSを利用して一日の時間外を計算するフォームを作成しています。 >   16 金 4:00 > 17 土 3:00 > 18 日 2:00 >  というような感じで時間を入力するのですが、曜日に特徴をつけて誤った入力をしないように、曜日が日曜日の時だけそのレコードの背景色を変更したいのです。よく、レポートで背景色を交互に変更するというやりかたをみてそれを行う方法はわかるのですが、それとおなじよなことをフォームでしたいのです。どうかお願いします!!ちなみにVBAはある程度わかりますのでVBAを利用した方法でもかまいません。

  • Access2000 フォームからレコード検索

    Access2000で質問です。 「顧客テーブル」を作ります。 顧客テーブルには以下のフィールドを設けます。 顧客ID(主キー) 名前 TEL 住所 変更住所 顧客IDから住所まではすでにデータが入っています。 「変更住所」に新しくデータを入れていきます。 その際に、フォームを利用したいと思っていますが、 新規フォーム(何もデータが入っていない)に顧客IDを入れたら、すでに顧客テーブルに入力されている名前、TEL、住所がパッと表示され、変更住所だけが空欄で表示されるようなフォームを作りたいと思います。 どのような方法がありますでしょうか? ぜひお知恵を貸してください。よろしくお願いいたします。

  • アクセスのフォームを開くときに新しいレコードへ移動するには?

    アクセスの入力用のフォームを開くときに、新しいレコードへ移動させて、すぐに入力ができるようにしたいのですが、マクロを使っても「レコードセットの最後のレコードよりも後に移動することはできません」のエラーメッセージが出てしまい、新しい入力ができなくなってしまいました。プロパティの更新の許可、追加の許可、削除の許可はいずれも「はい」にしています。どうすれば新しいレコードの入力ができるのでしょうか?困ってます。

  • アクセスのフォームで立ち上げと同時に新規レコードを出したい。

    先日、いろいろと教えていただいたおかげで、なんとか植木鉢の管理表が出来、ぽつぽつとデータを入力しています。 が、当方相当そそっかしいもので、入力のためのフォームを立ち上げつい、そのまま入力してしまい、何回1番先頭のレコードを書き直した事か・・・。 そこで、フォームを立ち上げた時に自動的に新規レコードに書き込める状態にするか、フォーム上からではデータの訂正が出来ない(変更はフォームでなくテーブルから行う)様にする方法は無いでしょうか?

  • accessのフォームで元になるクエリの名称を変更した場合

    ACCESS2000の超初心者です。先日に質問を入力しましたが内容を間違えていましたので再掲です。宜しくお願いいたします。  accessのフォームで元になるクエリの名称を変更した場合、そのフォームは実行しても「データが取り出せません」となってしまうので、フォーム側の設定変更で対応したいのです。このサイトの過去質問からデザインビューのプロパティでレコードソースを新しいクエリに変えればよい となっていたので、やってみましたが「データが取り出せません」のままです。レコードソースはプロパティを開いてデータのタブの▼からクエリを選択して変更しているのですが、変更方法が間違っているのでしょうか。

  • Accessのデータアクセスページからのレコードの編集ができません

    Accessのデータアクセスページからレコードの編集(変更)をしたいと思っています。 意図したデータの出力までは上手くいき、出力フィールドで文字を選択することはできるのですが、変更や追加・削除等の編集ができません。 1件検索の選択クエリをデータソースとしてページを作成しましたが、編集を行う為には何か特殊な設定が必要なのでしょうか? 過去の質問も検索し参考にさせて頂いたのですが、Access初心者の為自分の力だけでは解決できませんでした。 参考までに、以下が現在の設定項目です。 データベース側の設定 ・プロパティ→セキュリティ  全グループにフルコントロール ・使用している選択クエリよりの編集・レコード追加は可能 データアクセスページ側の設定 ・データリンクプロパティ→詳細設定→アクセス許可  ReadWrite  ShareDenyNone  にチェックがはいっている ・ページのプロパティ  RecordsetType=dscUpdatableSnapshot ・グループレベルのプロパティ  AllowAdditions  AllowDeletions  AllowEdits  はすべてTrue 「もしかすると・・・」という些細なことでも結構です、お知恵をお借りできないでしょうか? よろしくお願いします。

  • アクセス2007 フォームで入力したデータが検索フォームの結果に反映されません

    アクセス2007を使用しています。 今顧客のデータベースを作成しています。 新規の顧客のデータを入力し、検索して顧客データを閲覧できるようにしたいです。 以下のような構成にしてあります。 ○T顧客マスタ ○F新規入力 ○F検索 ○Q検索 新規の顧客データをフォーム【F新規入力】より入力して、入力したデータはテーブル【T顧客マスタ】に格納されます。 また、検索フォームとして顧客名や顧客住所から、該当する顧客データをあいまい検索できるような【F検索】を作成しました。(Q検索から作成) しかし、サンプルデータとしてはじめにインポートしたデータ200件は検索対象となっているのですが、【F新規入力】から入力したデータ10件は検索に引っ掛かりません。【T顧客マスタ】には格納されているのですが・・・ 当方、アクセスは初心者なので何か根本的に間違っているのかも知れませんが、どうにもこうにもわからないので質問いたしました。 質問内容がわかりづらいようでしたら申し訳ありません。都度補足いたしますのでよろしくお願いいたします。