If you're editing a subform and you move off of it, chances are quite good that it's no longer dirty - you just saved the record. So checking for dirty can return False, yet you edited a record you may not have wanted to edit. Sometimes, the only way around this is to use unbound forms or what I call staging tables. In the latter case these tables may be exact dupes of the primary table except they cannot have an autonumber field (or at least that would be useless). You would have the PK values from the primary table as foreign key values though, so that you can relate the changes made back to the primary table. In the end, if the user decides to not save changes, the staging table data is flushed and the form closed.
The more we hear silence, the more we begin to think about our value in this universe.
Paraphrase of Professor Brian Cox.