我尝试使用子表单容器来切换显示在表单上的访问子表单。我可以成功地做到这一点,但是当我回到我以前打开过的表格时,它已经重新恢复到它的初始状态。有什么方法我可以" pop"从子报表中生成表单但是它们在内存中保持活动状态,这样当我弹回它时会显示屏幕上弹出的数据是活动的吗?希望不要构建某种书签例程,将其设置回原始状态。
答案 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中的表单已预先声明,这意味着您不需要Dim
或New
。您只需创建一个新的用户表单即可立即使用:
Option Explicit
Sub test()
UserForm1.Show ' the DEFAULT instance of userForm1 will be shown
End Sub
您可以将此视为免费使用该表单...但它需要付出代价,而您似乎已经发现了这一点。
如果您Dim
和New
分别来自,您可以获得更多控制权,例如:
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