毎度、手取り足取り本当にありがたいです。
Dirtyは、開いてないと使えないヨ、くらいしか知識が無かったので
Syscmdも有効活用していきたいと思います!
ありがとうございます…!
まだまだイベントのタイミングがうまくつかめていないので、
その部分についてももう一度勉強しなおしてみようと思います。
また、部品フォームのDirty部分なんですが、以下のような形にしました。
Private Sub 部品F閉ボタン_click()
If Me.Dirty Then
If MsgBox("データが変更されています。保存して終了しますか?", vbYesNo) = vbNo Then
Exit Sub
Else
Me.BeforeUpdate = "" 'キャンセル無効
DoCmd.RunCommand acCmdSaveRecord
'DoCmd.RunCommand acCmdRefresh
Me.BeforeUpdate = "[イベント プロシージャ]" 'キャンセル有効
Call UserLog("MNFCT", "Update")
End If
End If
DoCmd.Close
End Sub
メインフォームの方はこのように
Private Sub 終了ボタン_Click()
On Error GoTo ErrHandler
If SysCmd(acSysCmdGetObjectState, acForm, "F_部品") <> 0 Then
Forms!F_部品.終了ボタン_Click
End If
If SysCmd(acSysCmdGetObjectState, acForm, "F_製品") <> 0 Then
Forms!F_製品.終了ボタン_Click
End If
DoCmd.Quit acQuitPrompt
ErrHandler:
End Sub
SysCmdを用いた、hirotonさんの方法でなく、上記のようなものでも
今回の件については問題なく動きますでしょうか?
通報 ...
理想の運用ならそれでいいと思いますが、フォームって予期せぬ閉じ方をされるんですよね
フォーム右上の×をクリックされたり(非表示にできるので何とかなる)、ACCESS本体の右上の×をクリックされたり(本体の表示をしない方法があるので何とかなる)、タスクバーから終了されたり、タスクマネージャーから強制終了されたり・・・
なので、実際にデータが決定されるタイミング(BeforeUpdate)で内容を決めましょう。という話です
こうしておけば、どのような形でフォームが閉じられてもBeforeUpdateイベントを通るので保存内容の確認ができます