Sql 访问子窗体源对象

Sql 访问子窗体源对象,sql,ms-access,ms-access-2007,vba,Sql,Ms Access,Ms Access 2007,Vba,我试图实现的是一个组合框(combo_sf)选择在子窗体控件(sf_记录)中指定窗体。我有大约10个窗体,它们的名称在组合框数据中。我是VBA新手,不确定我的方法是否正确: Private Sub Combo_sf_AfterUpdate() Dim strLoadTable As String strLoadTable = "Form." & Me.Combo_sf.Value MsgBox strLoadTable Forms![frm_Mnu

我试图实现的是一个组合框(combo_sf)选择在子窗体控件(sf_记录)中指定窗体。我有大约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
我已将其放置在组合框的更新后事件中,但当我进行选择时,表单中不会发生任何事情。我的方法是正确的还是另一种方法更有效?

你的方法应该有效。我在主窗体上放置了一个名为
cbxSubform
的组合框,并在其
AfterUpdate()
事件处理程序中添加了一行代码

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

…并且更改组合框中的选择会立即切换子窗体。您确定组合框的
AfterUpdate()
代码实际上正在启动吗?(您可以添加一个
MsgBox
或一个
Debug.Print
进行检查。)

可能是这一行让您感到困惑:

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

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

在这一行中,代码似乎试图更改
表单
对象的
源对象
属性

表单![frm\u Mnu\u管理配置设置]!sf_record.Form.SourceObject=strLoadTable
但是,
SourceObject
是子窗体控件的属性,而不是该控件中包含的窗体。因此,如果子窗体控件名为sf_record,请按此方式执行

表单![frm\u Mnu\u管理配置设置]!sf_record.SourceObject=strLoadTable
此外,如果更新后程序从
[frm\u Mnu\u Manage Configuration Settings]
运行,则您可以使用
Me
引用该表单

我!sf_record.SourceObject=strLoadTable
最后,如果
Me.Combo\u sf.Value
是表单的名称,则不需要在其名称前面加上“form”。在我的测试中,这两种方式都起作用,但我只想省去“形式”

strLoadTable=Me.Combo\u sf.Value

谢谢,我想我的宏中的问题没有被打开,但是这个信息非常有用。谢谢你的帮助!