如何通过VBA更改MS Access中打开的“选项卡式表单”的顺序

时间:2018-10-04 14:41:31

标签: vba forms ms-access tabs

我在MS Access中使用“选项卡式文档”表单(每个打开的主表单都有一个“选项卡”,使用户可以在表单之间轻松移动)。

有人知道通过VBA重新排序已打开表格的方法吗?我有解决方法的代码,可以关闭所有表单,然后按我需要的顺序重新打开它们,但是它笨拙且速度慢(某些表单很大,因此加载需要一段时间,而且用户经常应用过滤器/排序然后,我需要单独重新申请,以及重置当前记录等)。

我所需要做的就是更改屏幕上表格的顺序,所以我的方法似乎有些过头了-但我似乎找不到任何地方的信息!

(仅供参考,我不是在谈论Tab控件内的页面顺序,以免引起混淆!)

请附上屏幕快照,并打开三个选项卡式表单,我想重新排列它们,例如从左到右,它们变成:@Home,预订详细信息,查询详细信息

3 tabbed forms

谢谢

2 个答案:

答案 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

这可以帮助您减少加载时间。

[级联结果集] 如果所有表单都显示级联结果,则可能要考虑删除所有子表单的记录源,然后在每次选择时重新应用。

目标是最大程度地减少加载时间,并仅显示用户应该看到/想要看到的必要数据。希望这有助于您有所了解。