我在MS Access中使用“选项卡式文档”表单(每个打开的主表单都有一个“选项卡”,使用户可以在表单之间轻松移动)。
有人知道通过VBA重新排序已打开表格的方法吗?我有解决方法的代码,可以关闭所有表单,然后按我需要的顺序重新打开它们,但是它笨拙且速度慢(某些表单很大,因此加载需要一段时间,而且用户经常应用过滤器/排序然后,我需要单独重新申请,以及重置当前记录等)。
我所需要做的就是更改屏幕上表格的顺序,所以我的方法似乎有些过头了-但我似乎找不到任何地方的信息!
(仅供参考,我不是在谈论Tab控件内的页面顺序,以免引起混淆!)
请附上屏幕快照,并打开三个选项卡式表单,我想重新排列它们,例如从左到右,它们变成:@Home,预订详细信息,查询详细信息
谢谢
答案 0 :(得分:1)
好吧,我无意中发现了这一点。
在测试中,我发现如果隐藏选项卡式表单,则取消隐藏时,它不会显示在同一位置,但实际上现在显示为最后一个表单(即最右边的选项卡)
尤里卡!现在要重新排列表单,我只是将它们隐藏起来,然后按所需顺序取消隐藏它们。将其与DoCmd.Echo = False结合使用,在我的测试中,实际上开销为零。
Ph!
答案 1 :(得分:0)
如果用户没有一次看到所有表单,则无需浪费资源/时间一次加载所有表单。仅加载用户应该看到的内容。 NavigationControl对此非常有用。
方法1
从选项卡式文档移动到NavigationControl
。每个标签页都已加载OnDemand
,因此您的主表单启动会更快。如果主窗体和选项卡式窗体相互关联,请使用选项卡式窗体的OnOpen
事件动态更改记录源。
即Form_Open => me.RecordSource = Select * form T1 where T1.id = ParentForm.Id
方法2
如果无法移至导航控件,请模拟与上述相同的效果。 当更改/选择选项卡页时=>基础表单将获得记录源。
即
Private Sub TabCtl2_Change()
If Me.TabCtl2.value = 1 Then
me.subform1.recordsource = source
me.subform1.LinkChildFields = linkingFieldName 'if related
me.subform1.LinkChildFields = LinkMasterFields 'if related
ElseIf Me.TabCtl2.value = 2 Then
'Your other form
end if
End Sub
这可以帮助您减少加载时间。
[级联结果集] 如果所有表单都显示级联结果,则可能要考虑删除所有子表单的记录源,然后在每次选择时重新应用。
目标是最大程度地减少加载时间,并仅显示用户应该看到/想要看到的必要数据。希望这有助于您有所了解。