在Access子窗体中切换表单源但在切换时记住当前数据

时间:2018-02-22 21:19:45

标签: vba forms access-vba access

我尝试使用子表单容器来切换显示在表单上的访问子表单。我可以成功地做到这一点,但是当我回到我以前打开过的表格时,它已经重新恢复到它的初始状态。有什么方法我可以" pop"从子报表中生成表单但是它们在内存中保持活动状态,这样当我弹回它时会显示屏幕上弹出的数据是活动的吗?希望不要构建某种书签例程,将其设置回原始状态。

2 个答案:

答案 0 :(得分:0)

相互叠加子表单并隐藏除当前要显示的表单之外的所有内容。

快速,高效且几乎为零的代码。像:

Private Sub DisplaySubform(ByVal SubformName As String)

    Dim C As Control

    For Each C in Me.Controls
        If C.ControlType = acSubform Then
            C.Visible = (C.Name = SubformName)
        End If
    Next

End Sub

答案 1 :(得分:0)

VBA中的表单已预先声明,这意味着您不需要DimNew。您只需创建一个新的用户表单即可立即使用:

Option Explicit

Sub test()
    UserForm1.Show ' the DEFAULT instance of userForm1 will be shown
End Sub

您可以将此视为免费使用该表单...但它需要付出代价,而您似乎已经发现了这一点。

如果您DimNew分别来自,您可以获得更多控制权,例如:

Option Explicit

Sub test()
    Dim myForm As UserForm1
    Set myForm = New UserForm1
    myForm.Show ' a SPECIFIC instance of userForm1 will be shown
End Sub

与显示特定的实例相比,显示默认实例之间存在天壤之别 - 后者更受欢迎。

有一种方法可以在一个单独的类中捕获表单数据,这是一个非常酷的模式,如@MatsMug所述:rubberduckvba.wordpress.com/2017/10/25/userform1-show

如果您想了解更多信息,我建议您自己获取一个Rubberduck的副本,这是(超过)VBA-IDE增强功能:https://github.com/rubberduck-vba/Rubberduck/releases