我想要实现的是组合框(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
我已经将它放在更新后事件的组合框中,但是当我做出选择时,表单中没有任何反应。我接近这个权利还是会以其他方式更好地工作?
答案 0 :(得分:5)
您的方法应工作。我在我的主窗体上放了一个名为cbxSubform
的组合框,并在其AfterUpdate()
事件处理程序中添加了一行代码...
Private Sub cbxSubform_AfterUpdate()
Me.mySubform.SourceObject = Me.cbxSubform.Value
End Sub
...并且更改组合框中的选择会立即切换子表单。您确定组合框的AfterUpdate()
代码实际上是在解雇吗? (您可以添加MsgBox
或Debug.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