アプリ版:「スタンプのみでお礼する」機能のリリースについて

現在、Accessにて家計簿を作っているのですが・・・。
始めにトップページとなるフォームを表示し、そこに今年の支出金額と入力フォームを開くボタンを表示してあります。
入力フォームを開いてもトップフォームは閉じず、後ろで表示されたままです。
入力フォームで使った金額などを入力して閉じると後ろに表示されたままのトップフォームにアクティブが戻るのですが・・・この方式だとトップフォームに表示してある今年の支出金額が、一度トップフォームを閉じて開きなおさないと最新の情報に更新されません。
入力フォームを開く際にトップフォームを閉じ、入力フォームを閉じる際にトップフォームを再度開くというやり方なら支出金額も最新の情報が表示されるのですが、どうしてもトップフォームを開いたままで入力フォームを開き、入力終わって閉じたらトップフォームの支出金額が自動で更新されるというやり方をしたいので、知識のある方がいましたらご指導お願いいたします。

つまるところ、フォームを閉じずにそのフォームにある、クエリを参照にしたテキストボックスの内容を最新の情報に更新する方法を教えてくださいと言うことですw
分かりにくくてすみません。

A 回答 (5件)

Forms![トップフォーム]![コントロール名].Requery


でトップフォームをアクティブにしなくても行けるはずなのですが・・。
それではトップフォーム名を取得してからRequeryしてみてはどうですか
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Forms![トップフォーム]![コントロール名].Requeryの代わりに
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
DoCmd.SelectObject acForm, "トップフォーム名"
DoCmd.Requery "コントロール名"
    • good
    • 3
この回答へのお礼

お礼が遅くなってすみません。
アドバイスに従い試してみましたが、ボタンを押したら入力フォームじゃなくトップフォームが閉じてしまうようになりました。(汗
もうどうにもなりそうにないのでトップフォームに更新ボタンをつけてMeRequeryで手動更新することにしましたw

お礼日時:2006/01/07 23:18

>コードで参照されている'トップフォーム'フォームが見つかりません。

」というエラー
Forms![トップフォーム]![コントロール名].Requery
のトップフォームとコントロール名はYOU-JIさんの作ったフォームの名前と今年の支出金額を表示するコントロール名(テキストボックスならその名前)に変更して記述してください。
    • good
    • 1
この回答へのお礼

あ、すみません(汗
『トップフォーム』、『コントロール名』はこちらで使っているトップフォームの名前、テキストボックスにそれぞれ直して記述しました。
それで出来なかったのでこちらで使ってるフォーム名をそのままエラーメッセージのところに使ったら解かりにくいと思って「トップフォーム」と変更して投稿したわけです。

お礼日時:2006/01/06 17:54

トップフォームの「アクティブ時」のイベントプロシージャに



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

では正しく更新しないので注意。

ボタンを押した所に更新のコードを入れると、そのボタンを押した時しか更新しないので、フォームの「アクティブ時」にコードを書くのが確実。

こうする事で「クエリの元になる、データが入ってるテーブルを直接開いて、手で数値を書き換えた」とかのイリーガルなケースでも、フォームがアクティブになれば必ず更新がかかる。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
トップフォームのアクティブ時だけでなく、フォーカス取得時や非アクティブ時、クリック時など色々なイベントのコードの場所に貼り付けて試してみましたが、どうにも更新できませんでした。
もしかすると私のやり方が悪いのかもしれません・・・(汗

お礼日時:2006/01/06 17:00

入力フォームを閉じる際に入力したレコードを保存しトップフォームのクエリをRequeryして入力フォームを閉じるようにすれば出来ます。



Forms![トップフォーム]![コントロール名].Requery
の記述を追加すれば出来ます。

Private Sub Cmd1_Click()
   ・
   ・
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Forms![トップフォーム]![コントロール名].Requery
DoCmd.Close
   ・
   ・
End Sub
途中省略してありますがこんな感じでRequery出来ます。
VBEのRequeryのヘルプでも参照してみてください。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
アドバイスどおり入力フォームの閉じるイベントのところに
DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70
Forms![トップフォーム]![コントロール名].Requery
の記述を追記しましたが、「マクロ式または Visual Basic コードで参照されている'トップフォーム'フォームが見つかりません。」というエラーメッセージが出てしまいました。
これからRequeryで検索かけてネットで調べてみます

お礼日時:2006/01/06 16:41

データを追加した際にトップページのフォームに


requery
refresh
をかけると更新されるのではないかと思います。

ちなみに、データの追加は何かのボタンを押した際に行われるようになっていますか?
    • good
    • 0
この回答へのお礼

お礼が少し遅れてしまいました。
回答どもです。

データ入力フォームはテーブルを参照して作ってありますので、ボタンを押さなくても一項目入力するごとに自動的にテーブルに書き込まれていく方式っぽいです。
ホントは決定ボタンを押せばデータを書き込み、見たいな感じでやりたいのですが、やり方が解からないのでとりあえず後回し中ですw

お礼日時:2006/01/06 17:03

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A