gpt4 book ai didi

ms-access - MS Access 2003 - 用于将值从一种形式传递到另一种形式的 VBA

转载 作者:行者123 更新时间:2023-12-02 19:22:10 25 4
gpt4 key购买 nike

那么如何将值从一种形式传递到另一种形式呢?例如:用户从列表中选择一个组织,这将打开一个旅行表单,允许用户输入有关旅行的各种信息。在一个地方,我想添加另一个小弹出表单,他们可以在其中输入他们正在 Access 的组织的联系信息(只是 POC 的名称和电话)。

因此,当从选择屏幕打开初始表单时,它有两个简单地隐藏在文本框中的 ID(一个是 tripID,另一个是 OrgID),那么我如何将它们传递给第二个小弹出窗口表单,以便联系信息具有相关 ID。

谢谢。

最佳答案

在这些情况下,最好的方法是不要尝试传递一堆变量。代码太多,而且不灵活。例如,如果您需要传递两个值,那么多年来当该要求增长到 5 个值时会发生什么?试图维护和传递一整套值(value)观需要太多的编码工作。

请记住,ms-access 中的每个表单实际上都是一个可以在代码中操作的类对象。所以,在这里使用对象方法,你会发现你不仅编写了更少的代码,而且你的代码会更干净,更模块化,不需要全局变量,并且你编写的代码通常可以在不同形式之间重用。

方法如下:

一般来说,当一个表单在表单打开事件中的第二个表单中启动另一个表单时(事实上,您甚至可以晚于加载事件使用),您可以获取对上一个表单对象的引用。换句话说,您可以在这里使用对象方法。

在表单模块级别,对于表单,我将表单对象声明为:

Option Compare Database
Option Explicit
dim frmPrevious as form

然后,在表单加载事件中,我们执行以下操作:

Set frmPrevious = Screen.ActiveForm

现在,我们表单中的任何代码都可以自由使用代码、事件,甚至是之前表单中声明为公共(public)的变量。

因此,如果您想强制以前形式的磁盘写入,并重新加载数据。

frmPrevious.Refresh

如果你想设置ID值,那么:

frmPrevious!ID = some value

并且,请注意,您甚至可以将前面的表单声明为该表单的 PUBLIC 变量,因此如果您有两个表单深,您可以:

frmPrevious.frmPrevious!ID = some value

因此,只需在每个表单代码模块中声明一个表单对象(或者至少是需要在代码中使用值的模块)。上述意味着任何代码都有对先前表单对象的现成引用。在表单中声明为公共(public)的函数将成为表单的方法,并且可以像这样运行:

frmPrevious.MyCustomRefresh

或者甚至像某些选项来强制以前的表单生成并设置发票号码:

frmPrevous.SetInvoice

frmPrevious.SetProjectStatusOn

因此,您不仅可以来回调整值和数据,而且可以轻松执行在先前表单的代码中构建的特性和函数。

事实上,作为编码标准,我的大多数表单都有一个名为 MyRefresh 的公共(public)函数。

请注意,这种方法的优点在于您可以从先前的表单中读取+使用+设置值。这允许您的代码不仅可以接收值,还可以以先前的形式设置值。所以这种方法是双向的。您可以在表单之间来回调整数据和值。这里的另一个优点是您不仅限于变量,还可以使用字段、控制值(事件、属性)等。

这种方法意味着以前的表单的大部分内容现在都触手可及。

所以不要尝试传递一整套变量。传递对表单的引用,您就可以轻松获得一个漂亮的现成对象,这使得解决此类编码问题变得轻而易举。

关于ms-access - MS Access 2003 - 用于将值从一种形式传递到另一种形式的 VBA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1462876/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com