11999 『[W2000/A2000] 帳票フォームの計算結果を代入する方法』- あーや (210.172.128.227) Win:2000 & Acc:2000
こんにちわ。
いつもありがとうございます。

テーブル連結の帳票フォームで計算結果を一括でテーブルに書き込み保存したい
と思います。
例えば、「数量」「単価」「金額」というテーブルの項目があって、
「金額」テキストボックスのコントロールソースに「数量*金額」と記述しています。
更新後に「値の代入」マクロを作成すれば、「数量」や「単価」が変更された時は
計算結果がテーブルに反映されます。
ですが、何も変更しなくても、フォームを開いた時に表示される計算結果を
ボタンを押した時にテーブルに反映させたいのですが、更新クエリを作成しても
うまく出来ません。
VBAでも構わないので、どなたかよろしくお願い致します。


12000 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- クロ (61.193.75.115) Win:2000SP4 & Acc:2002SP2
非連結のテキストボックスを1つ用意してください。
これを例えば「txtSum」という名前とします。

このtxtSumのコントロールソースを「=[単価]*[数量]」としてください。

次にフォームのプロパティの「レコード移動時」のイベントプロシージャに

Private Sub Form_Current()
   Me.金額 = Me.txtSum
End Sub

次にフォーム上の金額テキストボックスを不可視にして、その場所に
先程のtxtSumテキストボックスを配置してください。

こんなのでどうでしょう?


12001 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- あーや (210.172.128.227) Win:2000 & Acc:2000
クロさん!大変ありがとうございます!

フォームの表示ではバッチリ、計算結果が「txtSUM」テキストボックスに
表示されますが、テーブル「金額」には保存されていません・・・。
ちなみに元テーブルはテーブル作成クエリで作成し、「金額」はデフォルトで0
が入っています。

UPDATEやADDNEWを行わないといけませんか?


12002 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- クロ (61.193.75.115) Win:2000SP4 & Acc:2002SP2
>次にフォーム上の金額テキストボックスを不可視にして
この部分が重要です。金額テキストボックスは削除してはダメですよ。
あくまでも不可視するのです。
削除してしまったのならフォームをデザインモードで開き、メニューバーから
表示→フィールドリストでリストを表示し、金額フィールドをD&Dしてください。
金額フィールドのプロパティの書式のタブに「可視」というのを「はい」から
「いいえ」にしてください。

それと金額のテキストボックス名称は合ってますか?
Me.金額←部分のです。


ちなみに金額にtxtSumのデータが格納されるのは帳票フォームが次のレコードに
移動したときとしてあります。


12003 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- あーや (210.172.128.227) Win:2000 & Acc:2000
クロさん、ご丁寧にありがとうございます。
更に更に申し訳ありませんが、教えていただきたいです。

レコード移動時に変更をテーブルに保存する事はできました。
帳票フォームのデータは何万件もあるので
レコードを自動的に最初から最後まで移動させるのにはどうすれば
良いのですか?
もしくは、ボタンクリック時に一括更新するのは、また違う処理ですか?

重ね重ね、申し訳ありません。。。。


12004 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- クロ (61.193.75.115) Win:2000SP4 & Acc:2002SP2
>ボタンを押した時にテーブルに反映させたいのですが、更新クエリを作成しても
>うまく出来ません

この部分を読み落としてました。

フォームにコマンドボタンを作成(仮にcmdAutoとします)、クリック時のイベントプロシージャに
以下を記述

Private Sub cmdAuto_Click()
   DoCmd.RunSQL "UPDATE テーブル名 SET 金額 = [単価]*[数量];"
End Sub

とこれだけです。

txtSumも要りませんし、金額テキストボックスを不可視にしなくてもいいし、フォームの
「レコード移動時」のイベントプロシージャも要りませんね…
勘違いしてたようでごめんなさい…


12005 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- あーや (210.172.128.227) Win:2000 & Acc:2000
ありがとうございます。
そんな謝らないで下さい。クロさんだけがもう、頼みの綱なので・・・。
ですが、もう本当に申し訳ないのですが・・・

Private Sub cmdAuto_Click()
   DoCmd.RunSQL "UPDATE テーブル名 SET 金額 = [単価]*[数量];"
End Sub

ですと、全部のデータが最初に入力した1件の合計に書き変わってしまいます。
where id=id
というイメージなのですが、どう表記して良いか分かりません。

本当に申し訳ありません・・・。


12008 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- クロ (218.118.50.21) Win:2000SP4 & Acc:2002SP2
そうですか?う〜ん
ちょっと見えないのですが…
1.フォームはデータを入力するためのものでしょうか?
2.それとも既にある数量/単価が入ったテーブルの金額フィールドに合計を入れるものでしょうか?

最初はデータを都度入力するためだと思ったのでtxtSumやレコード移動時のイベントを書いたのですが
途中から"帳票フォームのデータは何万件もあるので…"と書いてあるので、既にある数量/単価が入った
テーブルの金額フィールドに合計を入れるもの(更新クエリ:UPDATEのSQL)をフォーム上にコマンドボ
タンを作って行なったのですが…このプロシージャは別フォームになくてもいいです。

今手元にAccessがないんで明日になると思います。
できれば、情報は小出しにせずに多めにください。それとテーブルの設計と教えてください。
それからやりたいのは1それとも2ですか?それ以外だったらそれも教えてください。


12009 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- クロ (61.193.75.115) Win:2000SP4 & Acc:2002SP2
これではどうでしょうか? Access97検証

Private Sub cmdAuto_Click()
   DoCmd.RunSQL "UPDATE テーブル名 SET 金額 = [単価]*[数量];"
   Me.Refresh
End Sub


12012 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- あーや (210.172.128.227) Win:2000 & Acc:2000
クロさん、拙い説明でご迷惑おかけしました。

更新クエリを2回実行すると希望とおりに保存されました。
ので、とりあえず出来た事にします。
なぜ2回実行なのか、分かっていないのですが・・・。

本当に色々とありがとうございました!!


12013 『Re:[W2000/A2000] 帳票フォームの計算結果を代入する方法』- クロ (61.193.75.115) Win:2000SP4 & Acc:2002SP2
Me.Refresh を入れてみて下さい。(参照12009レス)
フォーム再描写されていないからだと思います。


AccBBS 2.07 (Powered By Microsoft Access) (C)1999,2000,2002,2009,2010 RURI++