Это один из худших потоков доступа, которые я когда-либо видел на StackOverflow.com, потому что каждый ответ неверен, по крайней мере, в каком-то важном аспекте - ни один из них не будет работать, если вы вставите их в VBA в база данных Access.
Ключевые принципы здесь:
Открыть диалоговую форму модально (с аргументами acDialog)
Не закрывайте его после подтверждения значения, а вместо этого установите его свойство .Visible в False.
Затем в форме вызова прочитайте значение из скрытой формы, а затем закройте его.
Примерно так:
DoCmd.OpenForm "dlgPickDriver", , , , , acDialog
If IsLoaded("dlgPickDriver") Then
Me!DriverID = Forms!dlgPickDriver!cmbDriver
DoCmd.Close acForm, "dlgPickDriver"
End If
[IsLoaded - это функция, предоставляемая Microsoft; Я недавно опубликовал это здесь, на StackOverflow , но предположил бы, что подавляющее большинство разработчиков Access, пишущих на VBA, использовали бы его всегда]
Я бы не рекомендовал, чтобы код, запускаемый в диалоговой форме, вставлял данные в родительскую форму, потому что тогда невозможно использовать диалоговую форму в нескольких местах. Хорошая практика программирования заключается в том, чтобы диалоговая форма знала как можно меньше о контексте, в котором она называется. С другой стороны, это правда, что вызывающая форма должна знать имя элемента управления, из которого она получает значение, но, на мой взгляд, это более разумный контекст, чем наоборот.