こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

以前教えてもらった下記のサブフォームでのデータ保存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

投稿日時 - 2015-04-07 10:42:59

QNo.8950969

すぐに回答ほしいです

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

回答の場所を間違えていました。

>編集ボタンを押すと「鉛筆のマーク」に変わります。

このときの編集ボタンの内容は、どのように
なっていますか?

投稿日時 - 2015-04-07 15:14:09

補足

編集ボタンの内容です。

Private Sub 編集_Click()
Dim strFil As String
strFil = "[選択]=" & True
DoCmd.OpenForm "編集F", , , strFil
'DoCmd.Close acForm, "メイン画面F"  ←消す
'選択.Value = Null            ←消す
End Sub

何故かこれで編集可能になりました。

投稿日時 - 2015-04-07 16:52:55

お礼

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

投稿日時 - 2015-04-07 16:55:18

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(4)

補足は要請されてません。

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

返答の仕方も改善を要請します。

ありがとう。

投稿日時 - 2015-04-07 14:37:59

AccessもVBAも フォーム=データベースと理解してます。

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

従って、サブフォームから「住所録」を変更するのは理不尽と考えます。

投稿日時 - 2015-04-07 12:58:21

補足

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

投稿日時 - 2015-04-07 14:09:01

ANo.1

これは、ひょっとしたら前の質問の
「AND、OR文にすると選択後の編集が出来ない」
と関係があるかもしれませんが、一応、
メインフォームから、サブフォームを呼び出すときの
ボタンをクリックするときの内容はどのようなものですか。


もし、サブフォームを呼び出すときにメインフォームの
レコードが確定した状態、すなわちメインフォームの
左側に表示されるものが、「鉛筆のマーク」ならば
未確定のままになるので、テーブルでの保存がすまない
ままにサブフォームを開くことになります。もし
「黒い三角のマーク」になっていればデータは確定し、
保存されていることになります。

投稿日時 - 2015-04-07 12:28:18

補足

メインフォームでチェックボックスを付けると「黒い三角のマーク」ですが、編集ボタンを押すと「鉛筆のマーク」に変わります。この時サブフォームの左側は「黒い三角のマーク」になっています。そして保存ボタンを押すと「データの競合」のエラーがでて「他のユーザーによる変更を反映」を押すと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

投稿日時 - 2015-04-07 14:05:11

あなたにオススメの質問