Ton*_* L. 11 forms ms-access vba access-vba
我一直在努力解决这个问题,然后在一些帮助下,然后搜索它; 但我没有运气.所以我决定问.
我有两种形式在Access 2007中可以称他们为MainForm和EntryForm.
MainForm有一个子表单和一个按钮.该按钮EntryForm在添加模式下打开.我想要做的是EntryForm保存它将更新(重新查询)子表单的新记录MainForm.
我试过这个设置代码
Private Sub cmdSaveAndClose_Click()
DoCmd.Save
'requery list
Forms![MainForm]![subformName].Requery
'' I've also tried these
'Forms![MainForm]![subformName].Form.Requery
'Forms.("MainForm").[subformName].Requery
'Forms.("MainForm").[subformName].Form.Requery
DoCmd.Close
End Sub
Run Code Online (Sandbox Code Playgroud)
这些尝试似乎都不起作用.有没有办法解决这个问题?我在这里先向您的帮助表示感谢.
Fio*_*ala 15
您必须使用子窗体控件的名称,而不是子窗体的名称,尽管这些通常是相同的:
Forms![MainForm]![subform control name Name].Form.Requery
Run Code Online (Sandbox Code Playgroud)
或者,如果您在主表单上:
Me.[subform control name Name].Form.Requery
Run Code Online (Sandbox Code Playgroud)
更多信息:http://www.mvps.org/access/forms/frm0031.htm
只是对完成此方法的方法发表评论:
您将EntryForm永久地绑定到您正在调用它的表单上.我认为最好不要将形式与这样的背景联系起来.我将从Save/Close例程中删除requery,而是使用acDialog开关以模态方式打开EntryForm:
DoCmd.OpenForm "EntryForm", , ,"[ID]=" & Me!SubForm.Form!ID, , acDialog
Me!SubForm.Form.Requery
Run Code Online (Sandbox Code Playgroud)
这样,EntryForm就无法在一个上下文中使用.另一种方法是使EntryForm复杂化,这些知识可以通过哪种形式打开它以及需要重新获取的内容.我认为最好将这类内容保持在与其使用的上下文接近的位置,并尽可能简化被调用表单的代码.
也许这里的一个原则是,无论何时你使用另一种形式的Forms集合重新查找表单,这都是一个很好的迹象表明你的架构不正确 - 在我看来这应该很少发生.