我有两种主要形式。一个是仪表板,另一个是编辑。
编辑后,我有一个按钮可以重新打开仪表板。它可以打开仪表板,但我希望它刷新该仪表板中的子窗体。
此模块将刷新您传递的表单以及所有子表单。重新查询通常会重置所选项目,因此在重新查询之前,我们会保存当前记录。如果重新查询后记录不存在,它将正常返回到顶部,而不会出错。
Public Sub RefreshForm(ByRef theForm As Form)
On Error GoTo ErrorHandling
Dim thisRecord As Long
thisRecord = theForm.CurrentRecord
Echo False
Dim childForm As Control
For Each childForm In theForm.Controls
If TypeOf childForm Is SubForm Then
childForm.Requery
End If
Next
With theForm
.Requery
.Recordset.Move thisRecord
End With
ErrorHandling:
Echo True
End Sub
要使用它,您只需将其放在需要刷新的任何位置:
RefreshForm Me
您不需要关闭并重新打开任何内容。任何打开的窗体及其上的控件都可以从任何地方运行的VBA代码中重新查询。它与子窗体有点复杂。
重新查询当前窗体上的子窗体控件:[SubformControlName].Requery
在当前窗体上的子窗体控件中重新查询窗体:[SubformControlName].Form.Requery
重新查询当前窗体上的子窗体中的控件:[SubformControlName].Form.Controls("ControlName").Requery
若要在应用程序中的不同窗体上执行上述任何操作,请在前面加上 Forms![FormName].
示例:Forms![FormName].[SubformControlName].Form.Controls("ControlName").Requery