Jus*_*tin 9 parameters ms-access vba parameter-passing
那么如何将值从一种形式传递到另一种形式呢?例如:用户从列表中选择一个组织,这将打开一个旅行表单,允许用户输入有关旅行的各种信息.在一个地方,我想添加另一个小弹出窗口,他们可以在这里输入他们正在访问的组织的联系信息(只是POC的名称和电话).
因此,当从选择屏幕打开该初始表单时,它有两个ID,它们只是隐藏在文本框中(一个是tripID,另一个是OrgID),那么如何将这些ID传递给第二个小弹出窗体,以便联系信息具有相关ID.
谢谢.
Alb*_*lal 16
在这些情况下,最好的方法是不要尝试传递一堆变量.代码太多,而且不灵活.例如,如果您需要传递两个值,那么多年来当该需求增长到5个值时会发生什么?试图维护并传递一大堆价值观是编码工作太多了.
请记住,ms-access中的每个表单实际上都是一个可以在代码中操作的类对象.因此,在这里使用对象方法,您发现不仅编写更少的代码,而且您的代码将更干净,更模块化,不需要全局变量,并且您编写的代码通常可以在不同形式之间重复使用.
方法如下:
通常,当一个表单在表单on-open事件中以第二种形式启动另一个表单时(实际上,您甚至可以使用on-load事件),您可以获取对PREVIOUS表单对象的引用.换句话说,您可以在此处使用对象方法.
在表单模块级别,对于表单I,将表单对象声明为:
Option Compare Database
Option Explicit
dim frmPrevious as form
Run Code Online (Sandbox Code Playgroud)
然后,在表单onload事件中,我们去:
Set frmPrevious = Screen.ActiveForm
Run Code Online (Sandbox Code Playgroud)
现在,我们表单中的任何代码都可以自由地使用代码,事件,甚至是代码中前一个表单声明为public的变量.
因此,如果要强制写入先前表单的磁盘,并重新加载数据.
frmPrevious.Refresh
Run Code Online (Sandbox Code Playgroud)
如果要设置ID值,请转到:
frmPrevious!ID = some value
Run Code Online (Sandbox Code Playgroud)
并且,请注意,您甚至可以将表单声明为此表单的PUBLIC变量,因此,如果您有两个表单形式,您可以:
frmPrevious.frmPrevious!ID = some value
Run Code Online (Sandbox Code Playgroud)
因此,只需在EACH表单代码模块中声明一个表单对象(或者至少在代码中需要使用值的表单).以上意味着任何代码都具有对先前表单对象的现成引用.在表单中声明为public的函数将成为表单的METHOD,并且可以像下面这样运行:
frmPrevious.MyCustomRefresh
Run Code Online (Sandbox Code Playgroud)
甚至像强制上一个表单生成和设置发票号的一些选项:
frmPrevous.SetInvoice
Run Code Online (Sandbox Code Playgroud)
要么
frmPrevious.SetProjectStatusOn
Run Code Online (Sandbox Code Playgroud)
因此,您不仅可以来回移动值和数据,还可以轻松地执行您在代码中为常用表单构建的功能和功能.
事实上,作为一种编码标准,我的形式中有大多数都有一个名为的公共函数MyRefresh.
请注意,这种方法的优点在于,您可以读取+使用前一个表单中的+设置值.这使您的代码不仅可以接收值,还可以设置上一个表单中的值.所以这种方法是双向的.您可以在表单之间来回移动数据和值.这里的另一个优点是你不仅限于变量,而是可以使用字段,控制值(事件,属性)等.
这种方法意味着以前的大部分形式现在触手可及.
所以不要试图传递一大堆变量.传递对表单的引用,并且在指尖就有一个很好的现成对象,这使得这种类型的编码问题变得轻而易举.
通常的方法是从弹出窗体中引用初始窗体中的文本框,如下所示:
Forms!frmInitialForm!tripID
Forms!frmInitialForm!OrgID
Run Code Online (Sandbox Code Playgroud)
但是,这会将弹出窗体紧密绑定到初始窗体,因此无法在应用程序的任何其他位置使用它.
更好的方法是使用OpenArgs:
DoCmd.OpenForm "frmPopup", OpenArgs:=Me.tripID & ", " & me.OrgID
Run Code Online (Sandbox Code Playgroud)
这会将您的两个值放入一个字符串中,该字符串将传递给弹出窗体.然后,您可以使用Split函数从OpenArgs中解析出两个值.
有关使用OpenArgs传递参数的详细信息,请参阅:http://www.fmsinc.com/free/NewTips/Access/accesstip13.asp