从另一个窗体刷新所有子窗体



我有两种主要形式。一个是仪表板,另一个是编辑

编辑后,我有一个按钮可以重新打开仪表板。它可以打开仪表板,但我希望它刷新该仪表板中的子窗体。

此模块将刷新您传递的表单以及所有子表单。重新查询通常会重置所选项目,因此在重新查询之前,我们会保存当前记录。如果重新查询后记录不存在,它将正常返回到顶部,而不会出错。

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

最新更新