重新查询后,在Access子表单中重新选择活动单元格

时间:2015-04-29 07:56:38

标签: vba ms-access

我有一个子表单,显示一个包含最多200行和最多35列的数据集。当用户选择一个单元格时,启用了UI的一部分,允许他们添加/编辑记录,然后子表单需要刷新,以便用户可以看到由AfterUpdate事件触发的更改效果

我遇到的问题是,当刷新子表单时,通过调用Requery,焦点将转移到子表单的左上角,这意味着用户不仅看不到其更改的效果,但他们也失去了位置。

我设法让子窗体通过捕获和设置Form.Recordset.AbsolutePosition属性来重新选择当前记录,但无法找到任何方法将焦点设置为用户之前所在的列。

我目前的代码是:

Private Sub Form_AfterUpdate()

    Dim lngCurrentPos As Long

    With Form_frmMain.subfrm_Results_Review
        lngCurrentPos = .Form.Recordset.AbsolutePosition
        .Requery
        .Form.Recordset.AbsolutePosition = lngCurrentPos
    End With

End Sub

但是,无论如何将焦点设置回特定的细胞?似乎应该有一种方法,因为这必须是一个常见的问题?

1 个答案:

答案 0 :(得分:2)

您可以通过扩展VBA代码将焦点设置为以前选择的表单控件。

Private Sub Form_AfterUpdate()

    Dim lngCurrentPos As Long
    Dim strControlName as String

    With Form_frmMain.subfrm_Results_Review
        strControlName = .Form.ActiveControl.Name
        lngCurrentPos = .Form.Recordset.AbsolutePosition
        .Requery
        .Form.Recordset.AbsolutePosition = lngCurrentPos
        .Form.Controls(strControlName).SetFocus
    End With

End Sub