• ベストアンサー

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

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

  • サブフォームのデータをそのままひっぱってきたい。

    Access2002です。 T_マスタ・T_サブ・T_備考という3つのテーブルをもとに F_マスタ・F_サブ・F_備考という3つのフォームを作成しています。 F_マスタの中にF_サブをサブフォームとして設定してあります。(氏名IDでリンク) F_サブの中に、Fサブ上の情報(氏名ID・データ年)で検索をして開く F_備考を開くためのコマンドボタンを設置してあります。 そこでF_備考を開いた後に、何も検索結果が出されなかったら、 入力をするために、「入力」というボタンを設置しました。 このボタンを押すと、F_サブ上の「氏名ID」「データ年」を 自動でF_備考の同じ名前のところへ入力したいのです。 ですが、実行すると「F_サブフォームは見つからない」という旨の エラーが出てしまいます。 それならF_サブを開いてしまえと、コマンドボタン上に、 F_サブを開く設定をしたのですが、今度は 「サブフォームに設定してあるフォームは開けない」という エラーメッセージが表示されてしまいました。 サブフォームのデータをそのまま参照することはできないのでしょうか? 実際のコードは以下のような簡単なものです。 F_備考の「入力」ボタン Me!氏名ID = Forms![F_サブ]![氏名ID] Me!データ年 = Forms![F_サブ]![データ年] どうやったらデータをひっぱってこれるのでしょうか? 宜しくお願いします。

  • Access2016 サブフォームへのデータ取込み

    メインフォームに入力したコードによって、マスターに登録してある複数のレコードデータをサブフォームに取り込みたいのですが。 例: メインフォームに献立コード(例えばカレーのコード)を入力すると、献立マスター(献立によって材料と使用量が登録してある)の材料(じゃがいも、人参、玉ねぎ、牛肉、ルー)と使用量がサブフォーム(今回5件のデータ)に入力されるような処理を行いたいのですが、ご教授願えませんでしょうか。もしVBAが必要ならばそれでもお願いしたいと思います。 メインとサブフォームのリンク親子フィールドは年月日にしています。 お手数おかけいたしますがよろしくお願いいたします。

  • アクセス サブフォームの使い方

    フォームにテキストボックスとコマンドボタンサブフォームが1つづつありま す。 やりたいことは、テキストボックスに入力した条件でコマンドボタンを押すと サブフォームに結果が表示されるというものです。 ID 分類 名称 1  花  バラ 2  花  ユリ 3  昆虫 カブトムシ とテーブルがあった場合、 テキストボックスに 花 を入力すると サブフォームに バラとユリが 表示されるというものです。(実際にはフィールド数はもっとあります。) コマンドボタンにクエリの実行を登録し、サブフォームはクエリをベースに作 成しました。 コマンドボタンをクリックするとクエリの結果が表示され(当たり前ですね) サブフォームは白紙のままです。 ファームのデザインビューをクリックし、再度フォームを表示すると結果は反 映されます。 この、クエリの結果を表示せず、かつサブフォームに結果を表示させる方法を 教えてください。

  • サブフォームをリクエリするには?

    アクセスのフォームにはサブフォームがあり、 親フォームの上にあるコマンドボタンで、テーブルに対してアクションクエリでレコードの削除やレコードの更新を行います。 サブフォームにはそのテーブルをソースとしたデータを表示させているのですが、 親フォームの上にあるコマンドボタンのイベントの最後に、 Me.Controls("サブフォーム").Requery を入れても、フォームのデータが#Deletedになります。 Me.Requery でも、サブフォームのデータは#Deletedになってしまいます。 フォームを開きなおしたり、並べ替えをすればデータが表示されますが コマンドボタン押下後にイベントを実行し終わったら、サブフォームのデータも更新されたデータを表示するさせるには どうすればいいでしょうか?

  • サブフォームの表示の種類をVBAで操作したい

    こんばんは。 アクセスのフォームの中にサブフォームを入れていて コマンドボタンを押すたびに そのサブフォームを フォームビューか、 データシートビューか、 ピボットテーブルビューかに切り替えたいのですが VBAで可能でしょうか? 宜しくお願い致します。

  • ACCESS2003 サブフォームのデータ

    こんにちは。宜しくお願い致します。 ACCESS2003でDBを作成しています。 メインフォームの中にサブフォームを作っています。 それぞれのID(オートナンバー)をリレーションシップとして設定し、連動しています。 メインフォームにデータを追加する際、サブフォームにデータを入力せずに、 次のメインフォームにデータを入れた場合、 サブフォームのオートナンバーが働かず、のちのちデータを入れた際にIDが違うため情報がずれてしまいます。 例えば、 メインフォームのID1~9のサブフォームには何も書き込まずメインフォームにだけデータを入力します。 その後、メインフォームのID10にあるサブフォームにデータを書き込むと、立ち上げなおしたときに、そのサブフォームへの入力したデータがID1のデータとして出てきてしまいます。 恐らく簡単なことだとは思うのですが、なにぶん初心者なものでさっぱり分かりません。 お分かりになる方、是非ともご教授お願いいたします。

  • ACCESSのサブフォームをVBAで・・・

    よろしくお願い致します。 ACCESSのサブフォームをVBAでテーブルに入力するにはどのようにしたら良いのでしょうか? イメージ的にはボタンをクリックするとメインのフォームとサブフォームの両方のデータが、別々のテーブルに入力されるようにしたいのですが・・・ ご回答ください。お願い致します。

  • Accessのサブフォーム

    教えてください。 フォームの中にサブフォームを作っているのですが(入力用の)、 サブフォーム内のテキストボックスは、1件目のデータと新規レコード が表示されています。 この新規レコードのテキストボックスを表示しない方法はありますか? 2件目以降のデータ(新規レコード)を入力する際は「追加」の コマンドボタンを使用して、その都度、新規レコードを表示させたい のです。 よろしくお願いします。

  • ACCESSでサブフォームの編集中レコードの処理

    ACCESS2000で単票系メインフォームと帳票系サブフォームを連結し、サブフォームに入力した明細(複数レコード)の金額累計(サブフォームフッターの非連結コントロール)をメイン側へ登録する処理を行っています。メイン側(マスターテーブル)への保存は保存用のコマンドボタンで行っています。サブフォーム側で完全に編集完了した場合(カーソルが次レコードの入力ラインにある)は正常に処理されますが、編集途中のレコードの金額は累計されないで保存されてしまいます。また保存コマンドボタンでサブフォームにRequeryをかけると累計金額がクリアされてしまいます。編集途中(つまり入力後エンタキーを押さないで直接コマンドボタンを押下)でもちゃんと累計されるような方法をご指導ください。よろしくお願いします。

  • サブフォームの切り替え方を教えてください

    ACCESS97のVBAでアプリケーションを作成しています。 その中でメインメニューのボタンを押した時に新しいフォームとその中のサブフォームが表示されるような処理を行っているのですが、基本的にフォームは同じのを使いまわし、その中のサブフォームをイベントによって切り替えたいのです(例えばメニュー画面でAのボタンをクリックしたら新しいフォームとその中のAAのサブフォームが、メニューのBのボタンをクリックしたらBBのサブフォームが表示するなど)。どなたか良い方法を知っていましたら教えてください。

専門家に質問してみよう