Forms 使用OpenArgs在窗体之间传递值

Forms 使用OpenArgs在窗体之间传递值,forms,ms-access,autofill,openargs,Forms,Ms Access,Autofill,Openargs,*****编辑 所以我有一张名为“新发票”的表格。此表单编辑一个表“发票”,其中包含以下内容:;发票号、客户、订单日期。在这个表单中,我有一个按钮,可以打开一个名为“InvoiceItem”的子表单。这将编辑包含发票号、项目代码、维度等的同名表 现在,我的按钮有一个事件过程,如下所示 私有子CreateInvoiceItem_Click() DoCmd.OpenForm“InvoiceItem”,OpenArgs:=“InvoiceNumber” 端接头 (我之所以使用按钮并在单独的窗口中打

*****编辑

所以我有一张名为“新发票”的表格。此表单编辑一个表“发票”,其中包含以下内容:;发票号、客户、订单日期。在这个表单中,我有一个按钮,可以打开一个名为“InvoiceItem”的子表单。这将编辑包含发票号、项目代码、维度等的同名表

现在,我的按钮有一个事件过程,如下所示


私有子CreateInvoiceItem_Click()

DoCmd.OpenForm“InvoiceItem”,OpenArgs:=“InvoiceNumber”

端接头


(我之所以使用按钮并在单独的窗口中打开表单,是因为我在子表单中有层叠组合框,当我将子表单插入父表单时,这些组合框会断开)

现在我遇到的问题是设置表单加载命令。我希望发生的是,单击按钮时,父表单中填写的InvoiceNumber会自动填充子表单


专用子表单_加载()

****所需代码****


结束Sub

因此,请尝试按照问题注释中所述修复组合框。另外,建议使用代码重新查询GotFocus事件中的依赖组合框。请记住,带有查找别名的级联组合框在连续或数据表形式下无法正常工作

如果您真的想将值传递给独立的表单,那么OpenArgs是一个很好的方法

可能需要将表单打开到新的记录行

DoCmd.OpenForm“InvoiceItem”、acFormAdd、acDialog、Me!发票编号

需要确保表单位于新记录上的代码

Private Sub Form_Load()
If Me.NewRecord Then Me!InvoiceNumber = Me.OpenArgs
End Sub

因此,请尝试修复问题注释中描述的组合框。另外,建议使用代码重新查询GotFocus事件中的依赖组合框。请记住,带有查找别名的级联组合框在连续或数据表形式下无法正常工作

如果您真的想将值传递给独立的表单,那么OpenArgs是一个很好的方法

可能需要将表单打开到新的记录行

DoCmd.OpenForm“InvoiceItem”、acFormAdd、acDialog、Me!发票编号

需要确保表单位于新记录上的代码

Private Sub Form_Load()
If Me.NewRecord Then Me!InvoiceNumber = Me.OpenArgs
End Sub

我发现最好的方法是在打开的表单中添加一个Public sub,然后在打开表单时将需要的参数传递给这个函数。因此,要完成您希望执行的操作,请在您正在打开的表单中添加这样的函数

Public Sub SetUpForm(InvoiceNumber as Long)

    txtInvoiceNumber.Value = InvoiceNumber

End Sub
其中txtInvoiceNumber是表单上要将值放入的控件

然后从你的按钮

DoCmd.OpenForm "InvoiceItem"
Forms!InvoiceItem.SetUpForm InvoiceNumber

这将把发票号的值传递给要打开的表单上的控件。这也为您控制流程提供了更大的灵活性,因为您可以将多个参数传递给sub,并且在sub中可以执行任意数量的任务。

我发现最好的方法是将公共sub添加到正在打开的表单中,然后在打开表单时将所需的任何参数传递给此函数形式。因此,要完成您希望执行的操作,请在您正在打开的表单中添加这样的函数

Public Sub SetUpForm(InvoiceNumber as Long)

    txtInvoiceNumber.Value = InvoiceNumber

End Sub
其中txtInvoiceNumber是表单上要将值放入的控件

然后从你的按钮

DoCmd.OpenForm "InvoiceItem"
Forms!InvoiceItem.SetUpForm InvoiceNumber

这将把发票号的值传递给要打开的表单上的控件。这也为您控制流程提供了更大的灵活性,因为您可以向sub传递多个参数,并且在sub中可以执行任意数量的任务。

有几种方法可以实现这一点。最简单的方法是构建表单/子表单排列,不需要代码。对于其他方法,您做了哪些研究?当您开发有特定问题的代码时,发布一个问题。我已经在网络上的一些地方找到了一些我不太理解的解决方案。对我来说最重要的是,我不只是想简单地复制别人的代码并让它工作,我想知道使用什么工具以及代码实际在做什么,以便我可以将它应用到其他情况。因此,是的,我可以使用直接连接的子表单,但是这个解决方案不适合我,因为在连接的子表单中,我有我编码的级联组合框。当我尝试将它们作为主窗体中的子窗体使用时,这些组合框将不起作用。如果RowSource的SQL语句结构正确,则组合框将起作用。不要在第二个(依赖)组合框的SQL语句中使用表单名称,只需引用第一个(主)组合框的名称,如:
selectfieldname fromtablename,其中ID=[combobox name]。这假定两个组合框都位于子窗体上。最好命名与其绑定到的字段不同的数据控件,如
cbxID
。最简单的方法是构建表单/子表单排列,不需要代码。对于其他方法,您做了哪些研究?当您开发有特定问题的代码时,发布一个问题。我已经在网络上的一些地方找到了一些我不太理解的解决方案。对我来说最重要的是,我不只是想简单地复制别人的代码并让它工作,我想知道使用什么工具以及代码实际在做什么,以便我可以将它应用到其他情况。因此,是的,我可以使用直接连接的子表单,但是这个解决方案不适合我,因为在连接的子表单中,我有我编码的级联组合框。当我尝试将它们作为主窗体中的子窗体使用时,这些组合框将不起作用。如果RowSource的SQL语句结构正确,则组合框将起作用。不要在第二个(依赖)组合框的SQL语句中使用表单名称,只需引用第一个(主)组合框的名称,如:
selectfieldname fromtablename,其中ID=[combobox name]。这假定两个组合框都位于子窗体上。贝斯