Обычно это делается с помощью формы, открытой в диалоговом режиме. В большинстве случаев в главной форме у вас будет кнопка «ДОБАВИТЬ НОВУЮ ЗАПИСЬ», которая при нажатии запускает такой код:
DoCmd.OpenForm "MyAddForm", , , , acFormAdd, acDialog
Это открывает форму, которую вы используете для добавления новой записи в новую, пустую запись, и приостанавливает код.
Однако вам нужно знать PK записи, которая была добавлена, поэтому вы не можете просто закрыть форму и позволить коду продолжаться. Итак, обычная практика - установить для свойства диалогового окна Visible значение False, извлечь из него нужные вам данные, затем закрыть его и сделать то, что вы хотите:
Dim lngPK As Long
DoCmd.OpenForm "MyAddForm", , , , acFormAdd, acDialog
If Forms!MyAddForm.Tag <> "Cancel" Then
lngPK = Forms!MyAddForm!PK
Application.Echo False
Me.Requery
With Me.RecordsetClone
.FindFirst "[PK]=" & lngPK
If Not .NoMatch Then
If Me.Dirty Then
Me.Dirty = False
End If
Me.Bookmark = .Bookmark
End If
End With
Application.Echo True
End If
DoCmd.Close acForm, "MyAddForm"
В диалоговой форме вы должны скрыть элементы управления окна по умолчанию, чтобы пользователь не мог закрыть его. Вместо этого используйте две командные кнопки SAVE и CANCEL. Кнопка SAVE делает это:
If Me.Dirty Then
Me.Dirty = False
End If.
Me.Visible = False
... и кнопка ОТМЕНА делает это:
Me.Undo
Me.Tag = "Cancel"
Me.Visible = False
В результате вы знаете, что запись не была сохранена, поэтому вы не хотите ничего делать с формой вызова.
Это все стандартное проектирование пользовательского интерфейса Access, и на сегодняшний день это самый простой и самый пуленепробиваемый метод для подобных действий.