使"DoCmd.GoToRecord"功能在子窗体上工作

Kam*_*biz 11 ms-access access-vba

我一直在DoCmd.GoToRecord , , acNewRec成功使用该函数来创建和移动到子窗体中的新记录(以表作为源).但是,当我尝试从父窗体执行相同操作时,这不起作用.我尝试了不同的方法,包括:

Me.sbfrm_subform.Controls("ctrName").SetFocus
DoCmd.GoToRecord , , acNewRec
Run Code Online (Sandbox Code Playgroud)

它只关注控件(ctrName),但无法添加并转到新记录,或者

DoCmd.GoToRecord acDataForm, Me.sbfrm_subform.Form.Name, acLast
Run Code Online (Sandbox Code Playgroud)

返回运行时错误2489,"对象的sbfrm_subform是打开的."

Pat*_*rez 10

尝试拆分操作:

Me.[sbfrm_subform].SetFocus
DoCmd.GoToRecord, , acNewRec
Run Code Online (Sandbox Code Playgroud)

或者,您可以尝试在子窗体中创建一个公共Sub,因为它成为表单的一种方法,您可以使用它.
在最新版本的Access上使用它,您甚至可以尝试直接使用表单的记录集来播放,例如 Me.Recordset.Movenext.


den*_*der 7

尝试将代码放入子窗体,然后从Parent调用它:

子表格代码:

Sub GoToNewRecord()
     DoCmd.GoToRecord , , acNewRec
End Sub
Run Code Online (Sandbox Code Playgroud)

家长表格代码:

Me.sbfrm_subform.GoToNewRecord
Run Code Online (Sandbox Code Playgroud)


小智 5

正如 iDevlop 所指出的,您可以使用子窗体的 Recordset 对象移动到新记录。但是,您不需要在子表单中创建公共子表单。您可以从主窗体中完成这一切:

Me.[subform control name].SetFocus
Form_[subform form name].Recordset.AddNew
Run Code Online (Sandbox Code Playgroud)

为了使用 Form_[form name] 语法,表单必须具有 VBA 代码模块。如果表单没有,并且由于某种原因您反对创建一个空表单,则可以改用 Forms!MyForm.SubformControl.Form 语法。但 Form_[表单名称] 更简单。