Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 如何将焦点保留在子窗体上的选定记录上?_Ms Access_Vba - Fatal编程技术网

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
事件,还是使用哪个对象的事件?单击
程序后,您的
程序的全名是什么?请单击绿色复选标记,按回答结束此问题。这将给你分数,并防止其他人认为你仍然需要帮助。