Ms access 如何将焦点保留在子窗体上的选定记录上?
我有一个子表单,它没有链接到父表单。我通过单击从Ms access 如何将焦点保留在子窗体上的选定记录上?,ms-access,vba,Ms Access,Vba,我有一个子表单,它没有链接到父表单。我通过单击从子表单中选择一条记录,然后通过子表单的
子表单
中选择一条记录,然后通过子表单
的事件运行一条代码:
DoCmd.GoToRecord, acDataForm, "parentForm", acGoTo, me.Form.CurrentRecord
它将parentForm
更新为所需的记录,但是也会刷新子表单
,因为焦点会从我最初单击的记录移开
我怎样才能保持对
子表单上选定记录的关注?我已经在这里写了一个答案(),但还没有得到回复。这就是为什么我不把你的问题标记为重复的问题
假设主窗体上的子窗体控件名为ctlSubForm
,这将是在子窗体OnClick()
事件中调用的代码:
“存储当前子表单记录/书签”
Dim currentRecord作为变体
currentRecord=Me.Bookmark
'您当前的代码:
DoCmd.GoToRecord,acDataForm,“parentForm”,acGoTo,me.Form.CurrentRecord
“也许,如果它不起作用,也可以尝试使用:
”“是吗
'将子窗体记录/书签设置为存储的记录/书签
Me.Bookmark=currentRecord
'将焦点设置为主窗体子窗体控件
'(这是真正将焦点返回到子窗体所必需的)
Me.Parent.ctlSubForm.SetFocus
最后,我找到了问题的答案
通过单击连续子窗体
上未链接到父窗体
的特定记录,运行下面的代码,移动到父窗体
上的特定记录Me.CurrentRecord
不是移动parentForm
记录的可靠方法,如果子表单
根据ID
以外的一些其他参数进行过滤,并且也没有链接到父表单
。因此,我修改了我的代码,在那里我设置了一个SQL查询,然后将其作为parentForm
的RecordSource
。我在子窗体的事件中单击()时将此新代码放入
Dim lngPosition as Long
Dim SQL1 as String
Dim a as Long
a = Me.txt_ID 'It is shared unique ID between mainForm and subForm
lngPosition = Me.CurrentRecord
SQL1 = "SELECT myTbl.a, myTbl.b, mTbl.c FROM myTbl " _
& "WHERE ((myTbl.a) = " & a & ");"
Me.Parent.RecordSource = SQL1
Me.Parent.Requery
Me.Form.Recordset.Move lngPosition - 1
运行此操作后,焦点仍在我最初单击的子窗体的活动记录上,而mainForm
被移动到所需记录。您的代码无法解决我的问题。我的子窗体焦点仍在移动到第一个记录,而不是停留在我选择的同一个记录上。嗯,在测试了您的特定星座之后,我必须说,即使您的原始代码对我来说也很好。不需要明确地处理这个问题。刚才看到GoToRecord
后面的,
错误,必须删除。但我不认为这会造成问题。您的OnClick()
-事件过程中有更多的代码吗?嗯,我想我们这里的Access版本有一些问题。我在MS Access 2016上。我试图删除,
,但出现了错误。关于你的第二个问题,不,我没有任何其他代码。顺便说一句,请让我知道我是否应该将您的所有代码放在子表单的上的?我试着这样运行它,但在me.Bookmark=currentRecord
步骤中出现错误。此外,我的子表单
保留了焦点。然而,焦点转移到了第一条记录,而不是我在子窗体中单击的记录。这很奇怪。DoCmd.GoToRecord
的第一个参数是对象类型,因此acDataForm
。通过提供,
可以省略第一个参数。我使用Access 2013,但这不应该是问题所在。您是使用按钮的OnClick
事件,还是使用哪个对象的事件?单击
程序后,您的程序的全名是什么?请单击绿色复选标记,按回答结束此问题。这将给你分数,并防止其他人认为你仍然需要帮助。