連結フォームでフォームを閉じる時に更新があったかどうかをチェックしたいと言うことですよね。
このような場合、イベントがどのような順で発生するかを把握しておく必要があります。
フォームに更新がなかった場合は、読み込み解除時 → 閉じる時 という順で発生します。
フォームに更新があった場合は、更新前処理 → 更新後処理 → 読み込み解除時 → 閉じる時 という発生順になります。
読み込み解除時や閉じる時では、更新処理は終了してますので、Me.Dirtyは Falseになってますので判定できません。
更新後処理では、更新処理をキャンセルできませんので、「変更されています。よろしいでしょうか」と確認して「いいえ」と言われても、手遅れです。
結局、更新前処理で「変更されています。保存しますか。」と確認して、「いいえ」と言われたら、Cancel=True として更新処理をキャンセルすることになります。下記のようなコードになります。
vba
1Private Sub Form_BeforeUpdate(Cancel As Integer)
2 Select Case MsgBox("変更されています。保存しますか?", vbYesNo)
3 Case vbNo
4 Cancel = True
5 End Select
6End Sub
上記のコードで、メッセージボックスで「いいえ」を選択すると、閉じずに編集状態に戻ります。
上記はシンプルな例ですが、この問題は奥が深いです。下記のリンク先と関連記事を熟読されることをお勧めします。
保存前に確認する - hatena chips