我有一个子表单,显示一个包含最多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
但是,无论如何将焦点设置回特定的细胞?似乎应该有一种方法,因为这必须是一个常见的问题?
答案 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