Anzi ti mostro come si potrebbe ragionare, poi ci pensi sopra e confronti con quello che hai fatto….
Function SaveDataCancel(Optional mfrm As Access.Form) As Integer
Dim risposta As VBA.VbMsgBoxResult
Dim frm As Access.Form
SaveDataCancel= False
Set frm=mFrm
If frm is nothing then Set frm = Application.CodeContextObject
If frm.Dirty Then
risposta = MsgBox("Salvare le modifiche?" & vbCrLf & "(Si=Salva, No=elimina modifice, Annulla=Continua modifiche", vbYesNoCancel, "Salva modifiche")
If risposta = vbNo Then
SaveDataCancel= True
frm.Undo
Else
End If
End Function
Da chiamare nell'evento BeforeUpdate:
Private Sub Form_BeforeUpdate(Cancel As Integer)
Cancel = SaveData(Me) ' si può chiamare anche SaveData() ma io da dentro le form preferisco esplicitare
End Sub
Ora che questo abbia senso farlo in una Funzione comune e non nella Maschera… mah… a me non piace e lascia il tempo che trova, sicuramente prima di metterti a scrivere codice esterno impara a far funzionare le cose semplici…!!!
Questto fa la stessa cosa:
Private Sub Form_BeforeUpdate(Cancel As Integer)
If frm.Dirty Then
If MsgBox("Salvare le modifiche?" & vbCrLf & "(Si=Salva, No=elimina modifice, Annulla=Continua modifiche", vbYesNoCancel, "Salva modifiche") = vbNo Then
Cancel = True
Me.Undo
Else
End If
End Sub