Vba 如何在表单之间传递数据?
我有以下表格: 一旦我按下“新建付款”按钮,我希望表单获取成员ID文本框、名字文本框和姓氏文本框中的值,并自动将它们分别加载到下面表单上的字段中:Vba 如何在表单之间传递数据?,vba,database,ms-access,Vba,Database,Ms Access,我有以下表格: 一旦我按下“新建付款”按钮,我希望表单获取成员ID文本框、名字文本框和姓氏文本框中的值,并自动将它们分别加载到下面表单上的字段中: 我正在考虑使用全局变量,但我从未使用过VBA。有人能给我解释一下怎么做吗?正如一些人所说的,如果你使用一个选项卡控件,你可以把这个表单作为一个子表单,然后在大多数情况下,根本不需要代码 但是,传递值的方法有很多种 最干净的代码,没有全局变量 我建议采取这种做法: 您不传递值,而是“抓取”上一个表单对象 因此,在第二个表单代码模块中,您声明了一个名为f
我正在考虑使用全局变量,但我从未使用过VBA。有人能给我解释一下怎么做吗?正如一些人所说的,如果你使用一个选项卡控件,你可以把这个表单作为一个子表单,然后在大多数情况下,根本不需要代码 但是,传递值的方法有很多种 最干净的代码,没有全局变量 我建议采取这种做法: 您不传递值,而是“抓取”上一个表单对象 因此,在第二个表单代码模块中,您声明了一个名为frmPrevious的变量。此变量在表单模块级别声明 因此,您的代码模块将如下所示:
Option Compare Database
Option Explicit
Public frmPrevious As Form
现在,在“打开事件”窗体中,您可以执行以下操作:
Private Sub Report_Open(Cancel As Integer)
Set frmPrevious = Screen.ActiveForm
End Sub
请注意,在打开事件完成之前,当前表单不会成为活动表单。事实上,您甚至可以将上述代码放在forms on load事件中
好的,现在
您的新付款按钮代码
有了以上内容,您就可以自由地从上一个表单中获取所需的“任意”值
例如:
等等
因此,上面的内容很好,因为您可以传递/使用和引用上一个表单中的任何值或控件
但是,您不应重新复制LastName框,而实际上只需为客户设置客户ID或一些类似的信息,然后您就可以在将来的参考/gget电话号码、城市等
重新复制一个值是非常非常糟糕的方法,因为您正在破坏关系设计,并且您最终会编写成吨的代码
事实上,在代码中,“新建付款”按钮可能必须先转到新记录,否则上述代码将开始覆盖现有值
而且,如果用户点击了新的支付,然后决定退出而不添加?好吧,那你就会有空白记录了
这实际上意味着您应该将“复制”和“设置”上一个表单中的值的代码放在before insert事件中。此事件只会针对新记录触发,因此,如果在已知良好记录中意外写入值,则无需使用特殊代码进行检查或担心。全局变量是一种方法。将数据正确地抽象到一个模型类中,该模型类可以在表单实例之间传递。我认为全局变量是丑陋和错误的,甚至在任何其他编程语言中都不会被视为选项。不知道为什么它突然在VBA代码中被接受,但您的里程可能会有所不同。在我看来,您编写的代码比需要的要多,因为您使用了两个弹出表单来完成这项工作。如果您将支付表单作为子表单,则可以免费获得所需的功能,并且代码更少。
Me.CompanyName = frmPrevious!CompanyName
Me.member_id = fromPrevous!ID