- ベストアンサー
Access2007 フォームでの計算結果をテーブルに反映させるには?
ビスタでAccess2007を使っています あるテーブルにA~Dまでのフィールドが設定されています。 フォームでフィールドA.Bは手入力して C.Dには計算式を設定して計算結果を表示させていますがテーブルに反映されません。 (フォームにはきちんど式通りの答えが表示されますがテーブルのフィールドC.Dは空っぽです。) 例 A・・・10,000 B・・・0.1 C・・・1,000(計算式 A*B) D・・・9,000(計算式 A-C) フォーム上で行った計算結果をテーブルに入力反映させるにはどうすればよいでしょうか? テーブルやフォームの作り方が悪いのか? 計算式の設定が悪いのか? なぜテーブルに反映しないのか理由がわかりません。 そもそもフォーム上での計算はテーブルには反映しないのか? だとすれば反映させるにはどうすればよいのでしょうか? テーブルのフィールドに計算式を設定することは出来るのでしょうか? 出来るとすればその方法は? 疑問だらけでどうすれば求める結果が得られるのかさっぱり解りません。 当方Access2007は初心者も同然ですのでわかりやすく解説して戴ければ幸いです。 よろしくご教授ください。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (4)
- 30246kiku
- ベストアンサー率73% (370/504)
#3です > テーブルにも「計算C.D」のフィールドを追加しなくてもよいのでしょうか? > それともフォーム上だけでいいですか? ごめんなさい。 私の書き方が悪かったのか、・・・・ コントロールソースを使いたさそうな感じがしたので、前回の回答になってしまいました。 前回のは、値用、計算表示用を分けて考えたので、「計算C,D」はフォーム上だけのものになります。 ただ、前回のは[A][B]の入力で、[C][D]を確定させるやり方になります。 書き忘れていましたが、[C][D]は、連結状態であることが基本となります。 (コントロールソースは計算式ではなく、テーブル/クエリのフィールド名が指定されている) 通常操作では、[A][B]を入力したら[C][D]は計算するけど、 この時だけは、[C][D]を計算式以外の値を入力したい、とかあったとすると、 また違った方法をとることになります。 (コントロールソースを使用しないやり方) ※ 一度、新規accdbとかにサンプルテーブルを作成してみて、 小さい環境で確かめられるとよいと思います。
お礼
お礼が遅くなり申し訳ございません。 なかなかうまくいきませんが何とか結果をだそうと思います。 回答ありがとうございました。
- 30246kiku
- ベストアンサー率73% (370/504)
フォーム上の話で良いですよね。 値を扱うもの、計算結果を表示するものを分けて考えます。 C, D の値を扱うものはそのままで、「可視」を「いいえ」としておきます。 計算結果を表示するテキストボックスを追加します。(C, D をコピーしてもOK) テキストボックスの名前を「計算C」「計算D」と仮定します。 それぞれのコントロールソースを設定します。 「計算C」は、 =[A]*[B] 「計算D」は、 =[A]-[計算C] A, B に入力があると「計算C」「計算D」に結果が表示されますが、 このままでは値を扱う「C」「D」は更新されないので、 フォームの「更新前処理」で値を設定してあげます。 Private Sub Form_BeforeUpdate(Cancel As Integer) Me.C = Me.計算C Me.D = Me.計算D End Sub ※ テキストボックス「計算C」「計算D」のプロパティは必要に合わせ設定してください。 文字配置 / 編集ロック / タブストップ 等
補足
回答ありがとうございます。 テーブルにも「計算C.D」のフィールドを追加しなくてもよいのでしょうか? それともフォーム上だけでいいですか? よろしくご教授ください。
- tag1701
- ベストアンサー率54% (67/123)
>C.Dともに各プロパティシートのデータタブ内のコントロールソース やはりコントロールソースを変更しちゃっているのですね。 この状態はフォームコントロールの名前はCやDですが、テーブル とは切り離されていますので、反映されないわけです。 コントロールソースはC、Dの元に戻し、とりあえずイベントの フォーカス取得時にマクロを設定してみてください。 フォームデザインを開いたままで、マクロの作成を行い、 画像のようにアイテムに[FORMS]![本当のフォームの名称]![C] 式に[FORMS]![本当のフォームの名称]![A]*[FORMS]![本当のフォームの名称]![B] と入れて登録して動かしてみてください。
補足
再びの回答ありがとうございます。 アクセス2007のどこを探せばよいのでしょうか? 「値の代入」というアクションを見つけることが 出来ません・・・。 なにぶんマクロはさっぱり理解しておりませんので もう少し詳しい手順をご教授ください。 よろしくお願いいたします。
- tag1701
- ベストアンサー率54% (67/123)
>C.Dには計算式を設定して計算結果を表示させています これはどのようにされていますか?(マクロ?VBA?) もしコントロールソースに最初 C と入っていた場所に =[A]*[B]のようにされたのであれば、フォーム「C」は テーブルのC列から切り離されて、唯の計算結果を表す場所と なっていますので、当然CやD列には保存されません。 マクロでされるのであればイベントの所のフォームA、Bの変更時と フォームCのフォーカス取得時に値の代入マクロを作成しセットして おくと良いのではないでしょうか。 (当方2000しかないので2007と違うので正確にお伝えできませんので、雰囲気読み取ってもらえれば。。)
補足
C.Dともに各プロパティシートの データタブ内のコントロールソースと イベントタブ内の更新前処理に それぞれ同じ式が入っています。 マクロはいまひとつ良く理解できていないので・・・
お礼
お礼が遅くなり申し訳ございません。 なかなかうまくいきませんが何とか結果をだそうと思います。 回答ありがとうございました。