我有一个Microsoft Access弹出窗体,我用它来查找地址。一旦用户找到了邮政编码,地址就会被放入启动表格的各种文本框中。问题是,这个弹出窗体是从整个数据库中的各种形式启动的,因此它将结果放入的文本框位于不同的位置。
我试图通过以下方式解决这个问题。我有一个总是打开的交换机,所以我有一个隐藏的文本框,我以编程方式将我正在启动弹出窗体的表单的名称。然后我声明一个字符串变量,它被设置为这个隐藏文本框的当前值,如下所示:
Dim currentForm As String
currentForm = [Forms]![foo]![bar]
然后我尝试将我的地址详细信息放入相关的文本框中,如下所示:
Forms!currentForm![txtCurrentAdd1] = rst![Line1]
然而,这不按计划行事,我做错了什么?
由于
答案 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
的名称来为每个标签创建唯一的标题。