フォームを閉じると、バインドされたコントロールの値に対する保留中の変更の保存が自動的にトリガーされます。フォームのアンロードイベントまたはクローズイベントからその保存操作をインターセプトすることはできません。そして、それをインターセプトするために私が見つけることができる唯一の方法は、更新および挿入イベントの前のフォームからです。
Dim SaveFlag As Boolean
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.Dirty = True And SaveFlag = False Then
Me.Undo
End If
End Sub
挿入する前に、同様のことを行う必要があります。SaveFlag
また、変更を保存したいときに実際に変更を保存できるように、なんらかの方法で管理する必要があります。
Private Sub cmdSave_Click()
SaveFlag = True
Me.Dirty = False
SaveFlag = False
End Sub
ただし、レコード間を移動するとき、またはメインフォームとサブフォームの間でフォーカスを切り替えるときに変更を自動的に保存するなど、Accessのデフォルトの動作が必要な場合は、このアプローチは適していません。
この機能が十分に必要な場合は、バインドされていないデータコントロールに切り替えて、明示的に実行するように命令した場合にのみ値を保存できます。しかし、それは多くの余分な作業を追加することになり、努力する価値があるかどうかはわかりません。私はこれをユーザー教育の問題として扱いたくなります。「フォームに未保存の変更を加えてアプリケーションを閉じると、変更が保存されることに注意してください。」