Вы должны иметь возможность обрабатывать эти ошибки в комбинации из двух мест. Первое и самое важное - это событие Form_Error. Ваш код будет выглядеть примерно так:
Private Sub Form_Error(DataErr As Integer, Response As Integer)
If DataErr = 7787 Then
MsgBox "Oops, this record was edited by someone else or " & _
"in another screen while you were making edits." & _
"Your edits cannot be saved."
Response = acDataErrContinue
End If
End Sub
Вам также нужно будет обработать ошибку 3021 везде, где вы запускаете команду сохранения в VBA, например:
Private Sub cmdSave_Click()
On Error GoTo ErrHandler
DoCmd.RunCommand acCmdSaveRecord
Exit Sub
ErrHandler:
If Err.Number = 3021 Then
'Do Nothing
Resume Next
Else
'Handle other errors here
Resume Next
End If
End Sub
Теперь, я с готовностью согласен с одним из комментариев, что более важно, чтобы вы пытались разрешить все, что вызывает эти ошибки, а не кодировать вокруг них. В моем случае я использую вышеупомянутое решение для обработки конфликтов записи, которые возникают, когда пользователь открывает два экземпляра одинаковой формы для одной и той же записи и вносит изменения в обоих экземплярах. Было бы лучше, если бы я запретил пользователю открывать одну и ту же запись дважды или запретил редактирование, разрешив пользователю вносить изменения только в один из экземпляров открытой формы, но ни один из них не совсем прост в реализации, особенно когда вы используете Собственная коллекция форм, так что, думаю, можно сказать, что я жду "дождливого дня".