hiroton
2020/12/25 (金) 15:34:54
ca77e@f966d
とりあえず
フォームの状態を知るには?(T'sWareさん)
質問のコードを次のように変更すれば動作はすると思います
DoCmd.OpenForm "F_部品"
↓
If SysCmd(acSysCmdGetObjectState, acForm, "F_部品") <> 0 Then
(中略)
End If
フォームが開いているかどうかをチェックし、開いているときに限りDirtyプロパティをチェックすれば良いということですね
根本的にデータ更新タイミングなどが間違っているということでしょうか
データの更新自体は様々なタイミングで発生します。フォームを閉じるというアクションを取った場合は、Closeイベントの前にBeforeUpdateイベントが発生し、BeforeUpdateイベントが終わると保存内容が決定されます
(実際にはもっと様々なイベントが発生します)
イベントは1つのアクションに対して連鎖的に複数発生する場合があるので、どのイベントで処理するか適切に判断する必要があります
Closeイベントの時点ではすでにデータが決定されてしまっているので、そこで保存するかどうかの確認や、再度データを変更・保存しなおすような処理はすべきではありません
「データの更新処理が済んでないうちはフォームを閉じる処理をしてはいけない」という意味で、修正しようとした内容よりも質問時点でのコードのほうが考え方が正しいです
通報 ...