我找不到引用“父母”的正确方法

时间:2019-11-08 00:54:53

标签: vba ms-access parent

在Access主窗体上,我有一个列表框控件(名为“ ActionsTaken”),该控件显示了与主窗体记录相关联的已执行操作的列表。它们保存在链接到主表的单独表中。用一个按钮打开一个子窗体,将项目添加到列表中。输入文本后,我按下“完成”按钮,该按钮使用宏关闭子窗体。子窗体关闭时,停用事件将触发事件过程,该过程将验证数据,将其写入操作表,并(有希望)在主窗体上重新查询列表控件。如果我对重查询使用对主窗体上的控件的显式引用,则一切正常,但是从多个不同的主窗体调用了此子窗体,因此我想使用“父项”引用主窗体上的控件。我认为应该起作用的语法是:

Me.Parent!ActionsTaken.Requery

执行代码时,我在上一行收到调试中断,并且当我重置代码执行时,出现一个弹出框,显示“当前记录中没有名为“ Me.Parent!ActionsTaken”的字段”。该控件肯定在那里(记住,对它的明确引用有效)。

我怀疑我不明白应如何引用“父母”。我发现了许多其他的语法,其中包含点和爆炸的各种组合以及“ Me”不存在的情况。有些给了我不同的错误信息,但是没有用。

我发现了一些尴尬的解决方法,但是我真的很好奇问题所在。

2 个答案:

答案 0 :(得分:0)

子表单是位于另一个表单(即“父”)上的表单,并在打开另一个表单(“父”)时打开,因此它不是子表单且没有父表单。

通过OpenArgs将表单名称传递给第二个打开的表单:
DoCmd.OpenArgs "secondformname", , , , , , Me.Name

然后第二种形式可以引用第一种形式:
Forms(Me.OpenArgs).ActionsTaken.Requery

另一种方法是使用acDialog打开第二个表单,这将暂停第一个表单代码的执行,直到第二个表单关闭。

DoCmd.OpenArgs "secondformname", , , , , acDialog
Me.ActionsTaken.Requery

答案 1 :(得分:0)

多亏了June和其他人,我的工作正常了。我将“儿童”表单绑定到了一个表上,尽管它并不需要,因为这使我可以通过OpenForm命令间接传递记录号(ID)。我使用OpenForm命令的OpenArgs参数将“父母”表单名称传递给“孩子”(添加新操作子表单):

strFormName = Me.Name
DoCmd.OpenForm "Add New Action subform", , _
    "Comment Card ID Query", "[Comment Card].ID=[ID]" _
    , , , Me.Name

当我处理完“孩子”后,我将执行以下代码:

Dim strParentName As String
strParentName = Me.OpenArgs

' Requery the Actions List Box on the Parent
[Forms](strParentName)!ActionsTaken.Requery

' Close the form
DoCmd.Close

我尝试使用June建议的语法:Forms(Me.OpenArgs ....),但是在Office 365中,Access出现了错误。使用字符串变量是可行的。

感谢所有帮助!