質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.79%

ACCESS VBA サブフォーム Requeryが反映されない

解決済

回答 1

投稿

  • 評価 0
  • クリップ 0
  • VIEW 7,881

score 128

ACCESS VBAにて以下のプログラムを作成しています。
親フォーム名:F02_2_注文画面
テキストボックスを配置しているサブフォーム名:F02_1_入力画面
ボタンを配置しているサブフォーム名:F02_3_ボタン画面

発生してる問題

F02_3_ボタン画面のボタンをクリックすると、モジュール内のPublic Subの処理を実行し、F02_1_入力画面のRequeryを実行したら、Requeryが反映してないです。
どうすればいいでしょうか?

問題のコード

F02_3_ボタン画面
Private Sub Btn_1 Click()
  '非表示状態でフォームを開く
  Docmd.OpenForm "F02_1_入力画面", acNormal, , , acFormEdit , acHidden
  'サブフォーム処理に移動する
  Call Data_Load
End Sub

モジュール
Public Sub Data_Load()
  'テストデータをサブフォームのテキストボックスに出力する
  Forms!F02_1_入力画面!txt_b2.value = "12345"
  'Forms!親フォーム名!サブフォームエリア名.Form.Requery
  Forms!F02_2_注文画面.F02_1_入力画面.Form.Requery
End Sub
  • クリップを取り消します

  • 質問の評価を上げたことを取り消します

  • 質問の評価を下げたことを取り消します

回答 1

checkベストアンサー

0

まずは、
Forms!F02_1_入力画面!txt_b2.value = "12345"

だけでは、ソースのテーブルに反映されません。レコード保存操作をしないと。

with Forms!F02_1_入力画面
    !txt_b2.value = "12345"
    .Refresh '≒レコード保存
End Wuth

レコード保存してから、サブフォームを再クエリすれば反映されるでしょう。

だだし、再クエリすると先頭レコードへ移動しますので、更新したレコードが先頭レコードならという条件が付きますが。

ていうか、非表示でフォームを開かなくても、直接サブフォームのレコードを更新すればややこしいことを考えなくて済むような気がします。処理の全体像が不明なのでなんとも言えませんが。

Forms!F02_2_注文画面.F02_1_入力画面.Form!txt_b2.value = "12345"

投稿

hatena19

VBA総合1位

score 21848

  • Yoshikun_0945

    Yoshikun_0945

    2019/11/01 21:09

    回答いただきましてありがとうございます。

    このプログラムのF02_1_入力画面につきましては、テーブルやクエリと連結しておりません。

    F02_1_入力画面のテキストボックスに入力した内容は変数に代入させて処理後にテーブルに出力する予定です。
  • hatena19

    hatena19

    2019/11/01 21:20

    非連結ということですか。なら、サブフォームの再クエリ自体無意味です。再クエリは列結したテーブル/クエリのデータを再読み込みするということですから。

    また、別に開いたフォームの値が、サブフォームに反映することもありえません。連結していないのですから。

    回答の最後に書いた直接サブフォームのテキストボックスに代入する方法になります。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.79%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る