Combobox.requery не работает во вложенной форме в другой форме

#ms-access #vba

#ms-access #vba

Вопрос:

Я задавал соответствующий вопрос раньше, но это не решило проблему. Итак, я публикую это снова с более подробной информацией.

У меня есть форма, frmMain которая содержит вложенную форму frmSub . frmSub содержит поле со списком subCombo . В событии Not_in_List subCombo у меня есть следующий код:

 If msgbox ("Do you want to add this data in list?", vbYesNo) = VbYes then
   DoCmd.OpenForm "frmList", acNormal,,, acFormAdd, acDialog, NewData amp;";"
Response = acDataErrContinue
DoCmd.CancelEvent
Me.ActiveControl.Undo

End if
  

Откроется окно, frmList где я успешно добавляю эти новые данные, и в кнопке сохранить там у меня есть код для обновления источника строки для subCombo :

 DoCmd.Save
Me.Refresh

'make new data available in subCombo on frmMain
Forms!frmMain.frmSub.form.subCombo.Requery
  

Но эта последняя строка кода не работает. Таким образом, subCombo остается незатронутым.
Я не уверен, что вызывает эту проблему. Был бы признателен, если бы вы могли помочь в этом.

Комментарии:

1. Вам следует отредактировать свой предыдущий вопрос, а не публиковать почти идентичный.

2. Извините, я здесь новичок и не очень хорошо знаком с правилами. В следующий раз будем осторожны. На данный момент я публикую решение моей проблемы здесь и удалю другое.

Ответ №1:

Обратитесь к свойствам и элементам управления формы и подчиненной формы

Вам нужно

 Forms!frmMain!frmSub.Form!subCombo.Requery
  

Обратите внимание на дополнительный .Form

Комментарии:

1. Извините, это была ошибка в моем сообщении, просто исправил ее. В моем коде у меня есть . упомянутая форма. Также обновлен мой вопрос.

Ответ №2:

Что ж, проблема решена окончательно!

Оказывается, мне не нужно было запрашивать subCombo from frmList , поскольку он был открыт в acDailog режиме и приостановил предыдущий код при Not_in_List событии subCombo . Вместо этого я помещаю me.subCombo.Requery непосредственно перед End If строкой в Not_in_List событии, и это работает как по волшебству. Окончательный код выглядит следующим образом:

 `If msgbox ("Do you want to add this data in list?", vbYesNo) = VbYes then`
`DoCmd.OpenForm "frmList", acNormal,,, acFormAdd, acDialog, NewData amp;";"`
`Response = acDataErrContinue`
`DoCmd.CancelEvent`
`Me.ActiveControl.Undo`

`End if`