- ベストアンサー
Accessのフォーム更新方法
現在、Accessにて家計簿を作っているのですが・・・。 始めにトップページとなるフォームを表示し、そこに今年の支出金額と入力フォームを開くボタンを表示してあります。 入力フォームを開いてもトップフォームは閉じず、後ろで表示されたままです。 入力フォームで使った金額などを入力して閉じると後ろに表示されたままのトップフォームにアクティブが戻るのですが・・・この方式だとトップフォームに表示してある今年の支出金額が、一度トップフォームを閉じて開きなおさないと最新の情報に更新されません。 入力フォームを開く際にトップフォームを閉じ、入力フォームを閉じる際にトップフォームを再度開くというやり方なら支出金額も最新の情報が表示されるのですが、どうしてもトップフォームを開いたままで入力フォームを開き、入力終わって閉じたらトップフォームの支出金額が自動で更新されるというやり方をしたいので、知識のある方がいましたらご指導お願いいたします。 つまるところ、フォームを閉じずにそのフォームにある、クエリを参照にしたテキストボックスの内容を最新の情報に更新する方法を教えてくださいと言うことですw 分かりにくくてすみません。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
Forms![トップフォーム]![コントロール名].Requery でトップフォームをアクティブにしなくても行けるはずなのですが・・。 それではトップフォーム名を取得してからRequeryしてみてはどうですか DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms![トップフォーム]![コントロール名].Requeryの代わりに DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 DoCmd.SelectObject acForm, "トップフォーム名" DoCmd.Requery "コントロール名"
その他の回答 (4)
- O_cyan
- ベストアンサー率59% (745/1260)
>コードで参照されている'トップフォーム'フォームが見つかりません。」というエラー Forms![トップフォーム]![コントロール名].Requery のトップフォームとコントロール名はYOU-JIさんの作ったフォームの名前と今年の支出金額を表示するコントロール名(テキストボックスならその名前)に変更して記述してください。
お礼
あ、すみません(汗 『トップフォーム』、『コントロール名』はこちらで使っているトップフォームの名前、テキストボックスにそれぞれ直して記述しました。 それで出来なかったのでこちらで使ってるフォーム名をそのままエラーメッセージのところに使ったら解かりにくいと思って「トップフォーム」と変更して投稿したわけです。
- chie65536
- ベストアンサー率41% (2512/6032)
トップフォームの「アクティブ時」のイベントプロシージャに Private Sub Form_Activate() テキスト1.Requery End Sub などと書く。更新したいテキストボックスが複数あれば Private Sub Form_Activate() テキスト1.Requery テキスト2.Requery テキスト4.Requery End Sub などと追加すれば良い。なお、 Private Sub Form_Activate() Me.Requery End Sub では正しく更新しないので注意。 ボタンを押した所に更新のコードを入れると、そのボタンを押した時しか更新しないので、フォームの「アクティブ時」にコードを書くのが確実。 こうする事で「クエリの元になる、データが入ってるテーブルを直接開いて、手で数値を書き換えた」とかのイリーガルなケースでも、フォームがアクティブになれば必ず更新がかかる。
お礼
回答ありがとうございます。 トップフォームのアクティブ時だけでなく、フォーカス取得時や非アクティブ時、クリック時など色々なイベントのコードの場所に貼り付けて試してみましたが、どうにも更新できませんでした。 もしかすると私のやり方が悪いのかもしれません・・・(汗
- O_cyan
- ベストアンサー率59% (745/1260)
入力フォームを閉じる際に入力したレコードを保存しトップフォームのクエリをRequeryして入力フォームを閉じるようにすれば出来ます。 Forms![トップフォーム]![コントロール名].Requery の記述を追加すれば出来ます。 Private Sub Cmd1_Click() ・ ・ DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms![トップフォーム]![コントロール名].Requery DoCmd.Close ・ ・ End Sub 途中省略してありますがこんな感じでRequery出来ます。 VBEのRequeryのヘルプでも参照してみてください。
お礼
回答ありがとうございます。 アドバイスどおり入力フォームの閉じるイベントのところに DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms![トップフォーム]![コントロール名].Requery の記述を追記しましたが、「マクロ式または Visual Basic コードで参照されている'トップフォーム'フォームが見つかりません。」というエラーメッセージが出てしまいました。 これからRequeryで検索かけてネットで調べてみます
データを追加した際にトップページのフォームに requery refresh をかけると更新されるのではないかと思います。 ちなみに、データの追加は何かのボタンを押した際に行われるようになっていますか?
お礼
お礼が少し遅れてしまいました。 回答どもです。 データ入力フォームはテーブルを参照して作ってありますので、ボタンを押さなくても一項目入力するごとに自動的にテーブルに書き込まれていく方式っぽいです。 ホントは決定ボタンを押せばデータを書き込み、見たいな感じでやりたいのですが、やり方が解からないのでとりあえず後回し中ですw
お礼
お礼が遅くなってすみません。 アドバイスに従い試してみましたが、ボタンを押したら入力フォームじゃなくトップフォームが閉じてしまうようになりました。(汗 もうどうにもなりそうにないのでトップフォームに更新ボタンをつけてMeRequeryで手動更新することにしましたw