アクセスサブフォームで保存するとエラーとなる

このQ&Aのポイント
  • アクセスサブフォームでデータを保存するとエラーが発生しています。メインフォームの保存が自動で行われず、試行錯誤しても解決できません。
  • データ保存VBAを使用してアクセスサブフォームでデータを保存するとエラーが出ます。試しにいくつかの方法を試してみましたが、問題は解決しませんでした。
  • アクセスサブフォームでのデータ保存時に発生しているエラーを解決する方法がわかりません。メインフォームの保存が自動で行われないため、手動で保存しなければなりません。
回答を見る
  • ベストアンサー

アクセスサブフォームで保存するとエラーとなる

以前教えてもらった下記のサブフォームでのデータ保存VBAですが、このままだと添付ファイルのような画面が出てきてメインフォームでの保存が自動で出来ず、いろいろ試してみましたがうまくいきません。 何卒、ご指導宜しくお願い致します。 Private Sub 保存_Click() MsgBox "データを確定保存します" DoCmd.RunCommand acCmdSaveRecord If Not SysCmd(acSysCmdGetObjectState, acForm, "メインフォーム名") = 0 Then 'MsgBox "メインフォームの画面を更新します" With Forms!メインフォーム名 .Refresh End With End If End Sub

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

  • ベストアンサー
  • piroin654
  • ベストアンサー率75% (692/917)
回答No.4

回答の場所を間違えていました。 >編集ボタンを押すと「鉛筆のマーク」に変わります。 このときの編集ボタンの内容は、どのように なっていますか?

chi_ko6262
質問者

お礼

色々と何度もご指導ありがとうございます。人から出来ないといわれたものもありましたが、少しずつ解消できています。これからも宜しくお願い致します。

chi_ko6262
質問者

補足

編集ボタンの内容です。 Private Sub 編集_Click() Dim strFil As String strFil = "[選択]=" & True DoCmd.OpenForm "編集F", , , strFil 'DoCmd.Close acForm, "メイン画面F"  ←消す '選択.Value = Null            ←消す End Sub 何故かこれで編集可能になりました。

その他の回答 (3)

noname#206655
noname#206655
回答No.3

補足は要請されてません。 既に回答で改善されたとか。良かったです。今後も質問をオススメします。 ところで、回答に対しメッセージを送ることで、質問を閉じることができるようです。 可能なら、改善を受けて質問を閉じて頂くと、みんな幸せになれると思います。 返答の仕方も改善を要請します。 ありがとう。

noname#206655
noname#206655
回答No.2

AccessもVBAも フォーム=データベースと理解してます。 氏名、住所、電話番号などが入った住所録を作成する場合、住所と言うデータベースを他に作り、メインフォーム住所録からサブフォーム住所を呼び出して別データベースを追加、変える時保存と理解してます。 従って、サブフォームから「住所録」を変更するのは理不尽と考えます。

chi_ko6262
質問者

補足

ご助言ありがとうございます。但し、ほかの人の助言でサブフォームのデータをメインフォームに保存できるようになりました。

  • piroin654
  • ベストアンサー率75% (692/917)
回答No.1

これは、ひょっとしたら前の質問の 「AND、OR文にすると選択後の編集が出来ない」 と関係があるかもしれませんが、一応、 メインフォームから、サブフォームを呼び出すときの ボタンをクリックするときの内容はどのようなものですか。 もし、サブフォームを呼び出すときにメインフォームの レコードが確定した状態、すなわちメインフォームの 左側に表示されるものが、「鉛筆のマーク」ならば 未確定のままになるので、テーブルでの保存がすまない ままにサブフォームを開くことになります。もし 「黒い三角のマーク」になっていればデータは確定し、 保存されていることになります。

chi_ko6262
質問者

補足

メインフォームでチェックボックスを付けると「黒い三角のマーク」ですが、編集ボタンを押すと「鉛筆のマーク」に変わります。この時サブフォームの左側は「黒い三角のマーク」になっています。そして保存ボタンを押すと「データの競合」のエラーがでて「他のユーザーによる変更を反映」を押すと3197のエラーがまた出て、 .Refreshが黄色く光ります。 Private Sub 保存_Click() MsgBox "データを確定保存します" DoCmd.RunCommand acCmdSaveRecord If Not SysCmd(acSysCmdGetObjectState, acForm, "メイン画面F") = 0 Then 'MsgBox "メインフォームの画面を更新します" With Forms!メイン画面F .Refresh  ←ここが黄色くなります。 DoCmd.Requery End With End If DoCmd.Close End Sub

関連するQ&A

  • Access2007 サブフォームの新規レコードをすぐにフォームに表示させる方法

    サブフォーム上で適当なレコード(IDと商品名)を選択して、そのレコードにある入力ボタンを押すと、フォームのコンボボックス上にその商品名が出るようなフォームがあります。 すでに入力済みのIDと商品名は表示されます。 ところが、サブフォーム上でIDと商品名を新規入力して入力ボタンを押すと、フォームのコンボボックスは空白となり、商品データが表示されません。 しかし、一旦フォームを閉じて開くと、データは表示されています。 IDと商品名を新規入力して、そのままフォームのコンボボックスに反映させたいと思います。 入力ボタンはこのようにやってみました。 Private Sub 入力_Click() DoCmd.DoMenuItem acFormBar, acRecordsMenu, acSaveRecord, , acMenuVer70 Forms!フォーム!ID = Me.ID End Sub または、 Private Sub 入力_Click() DoCmd.RunCommand acCmdSaveRecord Forms!フォーム!ID = Me.ID End Sub ご教授いただければ幸いです。よろしくお願いいたします。

  • ACCESSで条件によってサブフォームを非表示に

    Accessの初心者です。よろしくお願いします。 Accessで住所録を作っています。 メインフォームは主に本人のデータを表示し、サブフォームで家族の データを表示するようにしました。 その時、家族がいない人についてはサブフォーム自体を表示しないようにしたいと思います。 そこで下記のようにしましたがうまくいきませんでした。 (1)サブフォーム内で家族の人数をカウントする。 (2)このカウント結果をメインフォームに表示する。(メインフォーム にテキストボックスを配置し、コントロールソースをサブフォームの 人数カウントにする。)     ここまではうまくいきました。 (3)ここでメインフォームのイベントの「開くとき」に以下のように記 述しました。(メインフォームのテキストボックスにカウントという  名前をつけました。) Private Sub Form_Open(Cancel As Integer) If Me!カウント = 0 Then サブフォーム.Visible = False Else サブフォーム.Visible = True End If End Sub この記述の仕方がまずいと思うのですが、どのようにすればよいか 分りません。よろしくお願いします。

  • アクセス サブフォームのレコードの値が変更したら

    フォームの中にテーブルに基づいたサブフォームを入れています。 サブフォームはデータシートビューで表示しています。 そのサブフォームのレコードの値が変わったら msgboxを表示させるにはどのイベントで行なえば良いですか? サーブフォームのコントロールに Private Sub ページ名_AfterUpdate() MsgBox "" End Sub としたら確かにメッセージボックスは表示されるのですが 全てのコントロールにつけないとだめですか? 「サブフォームのレコードの値が変更したら」 とするにはどうすればいいでしょうか?

  • access フォームについて

    access2003にて登録フォームを作成しています。 このフォーム内に入力したデータを登録ボタンを押し、「登録しますか」のメッセージに 「いいえ」とすれば保存せずにこのフォームを閉じる。 「キャンセル」とすれば保存せずにフォームに戻る。 「はい」とすれば保存して閉じたいです。 しかし、以下の式を実行すると 「いいえ」はバッチリ希望通りに動くのですが、 「キャンセル」をすると保存されてフォームに戻り、 「はい」とすると保存されずにフォームが閉じられてしまいます。 何がまずいのでしょうか・・・。 ----- Private Sub Form_BeforeUpdate(Cancel As Integer) Dim Ret As Integer Ret = MsgBox("登録しますか?" & vbCrLf & " " & vbCrLf & "「いいえ」を選択すると保存せず閉じます", vbYesNoCancel) '「いいえ」を選択したら、保存せずに閉じる If Ret = vbNo Then DoCmd.Close acForm, "振返りデータ", acSaveNo '「キャンセル」を選択したら、保存せずにフォームに戻る Else If Ret = vbCancel Then Else DoCmd.Close acForm, "振返りデータ", acSaveYes End If End If End Sub

  • アクセスのサブフォームの値のチェック

    Accessのサブファームにある、コンボボックスの値をチェックしたいので、下記のようにしてみました。 Dim ctl As Control For Each ctl In Me.Controls If ctl.ControlType = acSubform Then msgbox Forms!メインフォーム名!サブフォームコントロール名.Form!コントロール名 End If Next すると、サブフォームの現在選択しているコンボボックスの値しか表示されません。 現在表示されているサブフォームのコンボボックスの値すべてを表示させるにはどうすればいいのでしょうか。よろしくお願います。

  • サブフォームに変数を代入し、RecordSourceの値を取得したい

    サブフォームに変数を代入し、RecordSourceの値を取得したいのですがうまくいきません。 Sub test1() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource End Sub ******************************************************************* Sub test2() Dim サブフォーム As String Dim フォーム As String フォーム= "土台" サブフォーム = "フォーム1" MsgBox Form_フォーム1.RecordSource MsgBox Forms(フォーム).Controls(サブフォーム).RecordSource End Sub オブジェクトは、このプロパティまたはメソッドをサポートしていません。(Error 438) ******************************************************************* Sub test3() Dim サブフォーム As String Dim フォーム As String フォーム = "土台" サブフォーム = "フォーム1" MsgBox Forms(サブフォーム).RecordSource End Sub 実行時エラー'2450' マクロの式またはVisual Basic コート゛で参照されている 'フォーム名'フォームが見つかりません。 ******************************************************************* test1~3のうち test1のみはうまくいくのですが 変数を代入したいです。 ヘルフ゜のには Forms![受注]![受注サブフォーム].Formとなってますが これじゃ変数を代入できないですよね。 どうすればサブフォームに変数を代入しつつ、RecordSourceの値を取得できるのでしょうか? よろしくお願いします。

  • access サブフォーム間の連動について

    Access2013について メイン親単票フォーム上に連動する二つのサブフォームを配置させました。 内一つは帳票、もう一つは単票にし、帳票からレコードを選択するとデータ詳細が単票側が連動するまで至りましたが、ここでサブフォーム帳票を並べ替えや抽出を実行すると、サブフォーム間の連動が出来なくなり、解決に困っております。 解決方法をご存知の方、お力添え願います。 親フォームに VBA Private Sub Form_Open(Cancel As Integer) Set Me.SubForm2.Form.Recordset = Me.SubForm1.Form.Recordset End Sub 抽出方法としては帳票サブフォーム上からとメインフォーム上からの実行までを試しておりますが、いずれも抽出後にサブフォーム間の連動が出来なくなってしまう状況です。 お力添え、宜しくお願いいたします。

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

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

  • サブフォームの並べ替えをVBAで指定したい

    親フォームを開くときにサブフォームの並べ替えを実行したいのですが 親フォームのフォームモジュールに Private Sub Form_Load() With Me.Controls("サブフォーム ") .OrderBy = "日時 DESC" .OrderByOn = True End With End Sub としてるのですが、 OrderByの部分で、 実行時エラー438になります。 サブフォーム名は「サブフォーム」です。 サブフォームの中に日時と言うコントロールは存在します。 なぜエラーになるのでしょうか? ちなみにOrderByをなくしても .OrderByOn = True で同じエラーが発生します。

  • ACCESSのサブフォームについて

    ACCESSにおいて、サブフォームにデータを表示させた状態で、あるレコードをダブルクリックで選択させ、 そのデータ(対象レコード)をメインフォームに戻って使用させるにはどのようにしたらよろしいのでしょうか? サブフォームの該当箇所に、ダブルクリック時イベントを貼り付けて、 制御をメインフォームへ移すのでしょうか。 よろしくお願いします。