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