如何保持对子窗体上所选记录的关注?

时间:2019-03-25 09:59:34

标签: ms-access access-vba

我有一个SIZE.未与subForm链接。通过单击从parentForm中选择一条记录,然后通过subForm事件的On_Click()事件运行代码:

subForm

它会将 DoCmd.GoToRecord, acDataForm, "parentForm", acGoTo, me.Form.CurrentRecord 更新为所需的记录,但是也会刷新parentForm,因为焦点会从我最初单击的记录移开。

如何保持对subForm上所选记录的关注?

2 个答案:

答案 0 :(得分:0)

我已经在这里写了一个答案(Recalc Parent Form Without Losing Focus From The Current Record Of The SubForm),但是我还没有得到答复。因此,我不会将您的问题标记为重复。

假设您在主窗体上的子窗体控件名为ctlSubForm,这就是您在子窗体OnClick()事件中调用的代码:

'Store the current sub forms record/bookmark
Dim currentRecord As Variant
currentRecord = Me.Bookmark

'Your current code:
DoCmd.GoToRecord, acDataForm, "parentForm", acGoTo, me.Form.CurrentRecord

'Maybe, if it is not working, try to also use this:
'DoEvents

'Set the sub forms record/bookmark to the stored record/bookmark
Me.Bookmark = currentRecord

'Set the focus to the main forms sub form control
'(this is necessary to really get the focus back to the subform)
Me.Parent.ctlSubForm.SetFocus

答案 1 :(得分:0)

最后,我找到了解决我问题的方法。

运行以下代码,以通过单击parentForm上未与continuous subForm链接的特定记录来移至parentForm上的特定记录。如果Me.CurrentRecord被除parentForm之外的其他一些参数过滤而又不是subForm的情况下,ID不是移动linked记录的可靠方法到parentForm。因此,我修改了代码,在其中设置了SQL查询,然后将其设置为RecordSource中的parentForm。我将此新代码放在subForm的On_Click()事件中。

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

运行此命令后,焦点仍停留在subForm移动到所需记录时我最初单击的mainForm的活动记录上。