访问子表单源对象

时间:2013-05-02 09:05:43

标签: sql ms-access ms-access-2007 access-vba

我想要实现的是组合框(Combo_sf)选择来指示子窗体控件中的窗体(sf_record)我有大约10个窗体,它们的名字在组合框数据中。我是VBA的新手,不确定我的方法是否正确:

Private Sub Combo_sf_AfterUpdate()
    Dim strLoadTable As String  

    strLoadTable = "Form." & Me.Combo_sf.Value
    MsgBox strLoadTable

    Forms![frm_Mnu_Manage Configuration Settings]!sf_record.Form.SourceObject = strLoadTable

End Sub

我已经将它放在更新后事件的组合框中,但是当我做出选择时,表单中没有任何反应。我接近这个权利还是会以其他方式更好地工作?

3 个答案:

答案 0 :(得分:5)

您的方法工作。我在我的主窗体上放了一个名为cbxSubform的组合框,并在其AfterUpdate()事件处理程序中添加了一行代码...

Private Sub cbxSubform_AfterUpdate()
Me.mySubform.SourceObject = Me.cbxSubform.Value
End Sub

...并且更改组合框中的选择会立即切换子表单。您确定组合框的AfterUpdate()代码实际上是在解雇吗? (您可以添加MsgBoxDebug.Print进行检查。)

答案 1 :(得分:4)

可能是这条线让你绊倒了:

strLoadTable = "Form." & Me.Combo_sf.Value

你的表格对象叫什么?如果您的表单被称为Form.myTableName,则.可能会将其丢弃,请尝试将其设置为名称中没有点的表单。

答案 2 :(得分:4)

在这一行中,代码似乎试图更改SourceObject对象的Form属性。

Forms![frm_Mnu_Manage Configuration Settings]!sf_record.Form.SourceObject = strLoadTable

但是,SourceObject是子表单 control 的属性,而不是该控件中包含的表单。因此,如果子窗体控件名为 sf_record ,请按照这种方式执行。

Forms![frm_Mnu_Manage Configuration Settings]!sf_record.SourceObject = strLoadTable

此外,如果更新后的过程从[frm_Mnu_Manage Configuration Settings]开始运行,您可以使用Me来引用表单。

Me!sf_record.SourceObject = strLoadTable

最后,如果Me.Combo_sf.Value是表单的名称,则不需要在其名称前添加“Form。”。它在我的测试中以任何一种方式工作,但我只是离开“Form。”

strLoadTable = Me.Combo_sf.Value