• ベストアンサー

サブフォームのデータを保存する方法

VBAであるフォーム上のコマンドボタンで、別のフォーム上にデータを入力し保存をするのはどういうコードになるでしょうか。入力は出来るのですが、そのまま続いて保存する方法が分かりません。 またそのフォームにサブフォームが挿入されている場合、サブフォームのデータも保存するにはどうすればいいでしょうか。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • DexMachina
  • ベストアンサー率73% (1287/1744)
回答No.1

> 別のフォーム上にデータを入力し保存 「レコードの保存」を行うには、以下のようにします: (但し、回答の簡素化のため、エラー処理は省略しています) ※フォーム名を「メイン」とした場合。 Private Sub コマンド0_Click()   '別フォームへのレコードの入力   Forms!メイン!ID = Me!ID + 1    '入力の一例   'レコードの保存   Forms!メイン.SetFocus       '対象フォームをアクティブ化   RunCommand accmdSaveRecord  'レコードの保存   Me.SetFocus              '実行元のフォームに戻る End Sub なお、「対象フォームのRequery」でも通常はレコードの保存ができますが、 職場で作成したMDBファイルで、何かの条件で、それだとエラーになる場合が あったため、この場では上記を推奨しておきます。 (どういう条件だったかは、失念してしまいましたが・・・(汗)) > サブフォームのデータも保存 この場合は、上記に加えて、「サブフォームのアクティブ化」と「レコードの保存」 を実行してやればOkです: ※サブフォーム名(→プロパティシートの『その他』タブの『名前』に表示される  もの)を「サブ」とした場合。 Private Sub コマンド0_Click()   Forms!メイン!ID = Me!ID + 1   'メインフォームのレコード保存   Forms!メイン.SetFocus   RunCommand accmdSaveRecord   'サブフォームのレコード保存   Forms!メイン!サブ.SetFocus   RunCommand acCmdSaveRecord   Me.SetFocus End Sub なお、「Forms!メイン」を何度も参照する代わりに、Withステートメントを使用 したり、Form型のオブジェクト変数に格納してやると、若干ながら端末への 負荷が軽減されますので、併せて今後の参考まで。 (今回提示した程度のものなら、昨今のPCでは大した負荷にはなりませんが(汗)  どちらかというと、見やすくなるというメリットの方が大きいかもしれません) Private Sub コマンド0_Click()   Dim Frm As Form   'メインフォームを変数Frmに格納   Set Frm = Forms!メイン   With Frm     !ID = Me!ID + 1     .SetFocus     RunCommand accmdSaveRecord     !サブ.SetFocus     RunCommand acCmdSaveRecord   End With   Me.SetFocus   '念のため、明示的にメモリを解放   Set Frm = Nothing End Sub ※「Forms!メイン!サブ」には、「.Form」や「.Controls」が省略されています。   そちらを入れた方が使い慣れているようでしたら、それらを入れてもOkです。

snorioo
質問者

お礼

分かりやすい回答ありがとうございました。おかげさまで解決いたしました。 私の持っている解説書にはご回答のような説明が載っていません。ご推薦の解説書があれば教えていただけますでしょうか?

関連するQ&A

専門家に質問してみよう