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.
尝试将代码放入子窗体,然后从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_[表单名称] 更简单。