Ответ 1
Попробуйте поместить код в подчиненную форму и затем вызвать его из родителя:
Код подформы:
Sub GoToNewRecord()
DoCmd.GoToRecord , , acNewRec
End Sub
Код родительской формы:
Me.sbfrm_subform.GoToNewRecord
Я успешно использовал функцию DoCmd.GoToRecord , , acNewRec
для создания и перехода к новой записи в подчиненной форме (с таблицей в качестве источника). Однако, когда я пытаюсь сделать то же самое из родительской формы, это не сработает. Я пробовал разные подходы, в том числе:
Me.sbfrm_subform.Controls("ctrName").SetFocus
DoCmd.GoToRecord , , acNewRec
который только устанавливает фокус на элементе управления (ctrName), но не может добавить и перейти к новой записи, или
DoCmd.GoToRecord acDataForm, Me.sbfrm_subform.Form.Name, acLast
Что возвращает ошибка 2489 во время выполнения, "Объект sbfrm_subform не открыт".
Попробуйте поместить код в подчиненную форму и затем вызвать его из родителя:
Код подформы:
Sub GoToNewRecord()
DoCmd.GoToRecord , , acNewRec
End Sub
Код родительской формы:
Me.sbfrm_subform.GoToNewRecord
Попробуйте разделить операции:
Me.[sbfrm_subform].SetFocus
DoCmd.GoToRecord, , acNewRec
В качестве альтернативы вы можете попробовать создать публичный Sub в подчиненной форме, и поскольку он становится методом формы, вы можете использовать это.
Используя это в последних версиях Access, вы даже можете попробовать играть напрямую с помощью набора записей формы, например Me.Recordset.Movenext
.
Как отметил iDevlop, вы можете использовать объект Recordset подформы для перехода на новую запись. Тем не менее, вам не нужно создавать публичную часть субформы. Вы делаете все это из основной формы:
Me.[subform control name].SetFocus
Form_[subform form name].Recordset.AddNew
Чтобы использовать синтаксис Form_ [form name], форма должна иметь код кода VBA. Если форма не имеет одного, и по какой-то причине вы против создания пустого, тогда вы можете использовать синтаксис Forms! MyForm.SubformControl.Form. Но Form_ [Имя формы] проще.
В основной форме "On Current" я выполнил следующую процедуру события:
Private Sub Form_Current()
Me.SubformName.SetFocus
Me.SubformName.Requery
RunCommand acCmdRecordsGoToLast
DoCmd.GoToRecord , , acNewRec
Scan.SetFocus
End Sub
DoCmd предназначен для основной формы для запуска новой записи. Все это до того, чтобы установить подчиненную форму в последнюю запись и запросить ее, чтобы данные были свежими.
Вот как я решил свою проблему...
Основная форма: FRM_Trader_WorkSheet
Имя подформы - Frm_Trader_Worksheet_Sub
В открывшемся событии моей основной формы я закодирован следующим образом:
Private Sub Form_Open(Cancel As Integer)
Me.Frm_Trader_Worksheet_Sub.SetFocus
DoCmd.GoToRecord , , acLast
DoCmd.GoToRecord , , acNext
End Sub
Так как я не делаю ввода данных в своей основной форме, теперь моя основная форма открывается с акцентом на новую запись в моей дополнительной форме. Теперь я могу вернуться к предыдущим записям, если это необходимо, но я готов ввести новые данные при загрузке основной формы.
При этом вы можете добиться тех же результатов, просто установив свойство подформы на вкладке "Данные" "Ввод данных = ДА". Единственное различие заключается в том, что у вас больше не будет доступа к предыдущим записям...