我可以使用变量作为Microsoft Access VBA中的控件的名称

时间:2011-11-25 10:09:52

标签: ms-access vba

我有一个Microsoft Access弹出窗体,我用它来查找地址。一旦用户找到了邮政编码,地址就会被放入启动表格的各种文本框中。问题是,这个弹出窗体是从整个数据库中的各种形式启动的,因此它将结果放入的文本框位于不同的位置。

我试图通过以下方式解决这个问题。我有一个总是打开的交换机,所以我有一个隐藏的文本框,我以编程方式将我正在启动弹出窗体的表单的名称。然后我声明一个字符串变量,它被设置为这个隐藏文本框的当前值,如下所示:

Dim currentForm As String
currentForm = [Forms]![foo]![bar]

然后我尝试将我的地址详细信息放入相关的文本框中,如下所示:

Forms!currentForm![txtCurrentAdd1] = rst![Line1]

然而,这不按计划行事,我做错了什么?

由于

5 个答案:

答案 0 :(得分:5)

或者:

Dim currentForm As String
''Not sure where the two parts are coming from
''but you cannot have them like that
currentForm = "foobar"

Forms(currentForm).[txtCurrentAdd1] = rst![Line1]

或者

Dim currentForm As Form
Set currentForm = Forms![foobar]

currentForm![txtCurrentAdd1] = rst![Line1]

你可能想读一下bang vs dot。

请注意,整个事情看起来有点像你在上游游泳。

答案 1 :(得分:5)

您可以访问其他表单上的控件,如下所示:

Dim FormName As String
Dim ControlName As String

FormName = "YourForm"
ControlName = "YourTextbox"

Forms(FormName).Controls(ControlName) = "New Value"

答案 2 :(得分:1)

您也可以使用OpenArgs属性。要打开可重复使用的弹出窗口,请使用:

DoCmd.OpenForm FormName:="frmPopup", OpenArgs:=Me.Name

以传递来电者的姓名。

在frmPopup中,您可以参考Me.OpenArgs获取该信息。

答案 3 :(得分:1)

我知道这是一篇老帖子,但这可能对新读者有用。我解决在模块和表单之间传递变量的问题的简单方法是使用VBA注册表区域。这是一种非常简单易用的技术,可以使项目保持良好和干净。

保存值:

SaveSetting AppName, Section, Key, Setting

获取值:

GetSetting AppName, Section, Key, [Default]

这可以避免丢失对变量的跟踪并在表单上创建隐藏控件。它也适用于跨平台而无需在PC和Mac上进行更改。

然后,我通常在项目中设置一些常量来定义前三个参数:

Public Const REG_PROD = "My product name"
Public Const REG_CONFIG = "Configuration"
Public Const REG_SETTING1 = "My Setting 1"

所以上面的调用将成为:

保存值:

SaveSetting REG_PROD, REG_CONFIG, REG_SETTING1, "My Value"

获取值:

GetSetting REG_PROD, REG_CONFIG, REG_SETTING1, "Value not set"

我以前使用隐藏的控制方法,但它增加了很多管理,你不能总是变量值,而你可以保持一个RegEdit实例用于调试目的。

答案 4 :(得分:1)

我认为

Me.Controls(variablelabelName).Caption

您可以编写代码来更改变量,并用作label的名称来为每个标签创建唯一的标题。