在 VBA Access 中动态填充其他子表单的子表单
Posted
技术标签:
【中文标题】在 VBA Access 中动态填充其他子表单的子表单【英文标题】:SubForm that is dynamically filled with other subforms in VBA Access 【发布时间】:2017-11-03 19:44:38 【问题描述】:我想创建一个包含动态创建的子表单列表的弹出表单。子表单的数量由用户在父表单中确定。
这是一个草图来说明我想要做什么。用户可以将“Num Branches”的值更改为 2 到 10。这个数字反过来反映在下面的可滚动框中创建的子表单的数量中。子表单都来自相同的,我用红色勾勒了它们。 我有几个关于如何做到这一点的问题
一个子表单可以有多个吗? 如果上面的问题是否定的,而且我必须动态创建每个控件,我是否需要关注这个答案https://***.com/a/31301469/7254514中提到的754个动态创建的控件限制? 谁能给我一个循环示例,演示如何在可滚动框内动态创建这些子窗体?我想在每个 for 循环中唯一会改变的属性是“top”属性。【问题讨论】:
【参考方案1】:您可能不想动态创建子窗体控件(因为创建控件 = 切换到设计视图,需要对数据库进行排他锁等)
您不能使用具有多个子表单实例的连续表单之类的东西,因为 Access 不允许对连续表单进行子表单控件。
我的方法是在表单上有 10 个(最多)子表单控件,将它们全部隐藏,然后动态地将它们分配给特定的源对象。
伪代码:
Dim numBranches As Long
Dim i As Long
For i = 1 to numBranches
Me.Controls("subform" & i).Visible = True
Me.Controls("subform" & i).Form.Filter = "branch = " & i 'Appropriate filter here
Me.Controls("subform" & i).Form.FilterOn = True
Next i
【讨论】:
我喜欢这种方法,但让我看看我是否理解它。所以在我的主弹出窗体中,我将有 10 个隐藏的空子窗体控件。在您的伪代码中,这些将被命名为 subform1、subform2 等。然后,当弹出表单打开或 NumBranches 值更改时,我将填充这些空子表单。填充的设置为可见。子表单源对象中到底发生了什么?这会是我在设计视图中创建的静态表单吗? 啊,您多次显示同一个表单。我在想多种形式。在这种情况下,您不需要.SourceObject
部分(通常是表单名称),但您可以使用过滤器。请注意,您可以清除所有表单的.SourceObject
,并仅为您显示的表单设置它以优化性能。我已将答案调整为更合适的内容
好吧,酷。所以过滤器就像数据库中的一条记录,您希望该特定子表单控件表示?
是的,它只是一个 SQL WHERE
子句,减去 WHERE
以上是关于在 VBA Access 中动态填充其他子表单的子表单的主要内容,如果未能解决你的问题,请参考以下文章