11

我一直在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 未打开。”

4

9 回答 9

11

尝试拆分操作:

Me.[sbfrm_subform].SetFocus
DoCmd.GoToRecord, , acNewRec

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

于 2013-06-27T15:46:16.760 回答
9

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

子表格代码:

Sub GoToNewRecord()
     DoCmd.GoToRecord , , acNewRec
End Sub

父表格代码:

Me.sbfrm_subform.GoToNewRecord
于 2013-06-27T15:48:18.417 回答
5

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

Me.[subform control name].SetFocus
Form_[subform form name].Recordset.AddNew

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

于 2016-03-07T10:51:34.760 回答
2

我在主窗体“On Current”中执行了以下事件过程:

Private Sub Form_Current()
    Me.SubformName.SetFocus
    Me.SubformName.Requery
    RunCommand acCmdRecordsGoToLast
    DoCmd.GoToRecord , , acNewRec
    Scan.SetFocus
End Sub

DoCmd 用于主窗体开始新记录。在此之前的一切都是将子表单设置为最后一条记录并重新查询它,以便数据是新鲜的。

于 2016-09-05T03:35:24.517 回答
0
Private Sub anycotrl()
Me.yoursubformname_subform.SetFocus
DoCmd.GoToControl ("[anycontrolyouneed]")
DoCmd.GoToRecord , , acLast
End Sub
于 2019-02-16T08:24:12.600 回答
0

答案是使用以下行之一:

DoCmd.RunCommand acRecordsGotoNew
DoCmd.RunCommand acRecordsGotoNext
DoCmd.RunCommand acRecordsGotoPrevious
DoCmd.RunCommand acRecordsGotoFirst
DoCmd.RunCommand acRecordsGotoLast

取决于你想做什么。这在功能上与单击其中一个导航按钮(如果它们保持可见)相同。

如果您从父表单调用其中一个,您可能首先必须使用以下行将焦点设置到子表单上

Me.subform_name.SetFocus

不幸的是,似乎没有一个命令可以导航到记录集中的绝对位置,这将完成这组可能性。

于 2018-08-07T05:05:29.240 回答
0

对我有用的是:在显示记录的表单中,我将焦点设置到我希望的字段并设置记录集。设置记录集后,我只使用记录集的 AddNew 函数。

Public Sub GoToNewRecord()
   Me.<myTextbox>.SetFocus

   Dim rcClone as Recordset
   Set rcClone = Me.Recordset

   rcClone.AddNew
End Sub
于 2018-12-25T20:55:33.103 回答
0

这就是我解决问题的方法...

主窗体名称为 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

由于我没有在我的主表单上进行任何数据输入,现在我的主表单打开,重点是我的子表单中的新记录。如果需要,我现在可以返回到以前的记录,但我准备在加载主表单时输入新数据。

话虽如此,您只需在“数据”选项卡“数据条目 = YES”下设置子表单的属性即可获得相同的结果。唯一的区别是您将无法再访问以前的记录...

于 2017-07-22T16:45:51.783 回答
0

我发现了一个类似的问题(我认为)。使用链接表单的目的是在数据表视图中单击链接表单上的新行,并清除链接表单在父表单中的子表单中与之同步的记录。使用 DoCmd.GoToRecord , , acNewRec 工作但只有一次。找到的解决方案是先将焦点放在父表单上,然后将焦点放在子表单上。我记得之前在某个地方找到过这个——总是先把焦点放在父级上,然后是子级。...... Carpe Dium ....

于 2020-11-30T12:45:03.623 回答