2011-11-25 66 views
3

我有用于查找地址的Microsoft Access弹出窗体。一旦用户找到邮政编码,地址就会被放入从其发布的表格中的各种文本框中。问题是,这个弹出窗体是从整个数据库的各种表单启动的,因此它将结果放入的文本框位于不同的位置。我可以使用变量作为Microsoft Access VBA中的控件的名称吗?

我试着用下面的方法解决这个问题。我有一个总是打开的总机,所以我有一个隐藏的文本框,在那里我编程地把我弹出的窗体的名称从表单中。然后我宣布其设置为这个隐藏的文本框的当前值,像这样的字符串变量:

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

然后我试图把我的详细地址到相关的文本框,如下所示:

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

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

感谢

+0

要获取当前表单,只需使用'Me'! –

+0

@iDevelop只能在目前的形式下工作,而我认为海森堡是指写入的形式,yesno? – Fionnuala

+0

@Remou是的,你是正确的 – JMK

回答

4

或者:

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] 

你可能想在爆炸VS点读了。

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

+0

谢谢你的帮助,我会重点阅读爆炸vs点。 – JMK

+2

第二个例子必须是'Set currentForm = Forms![foobar]'。另外,如果我理解正确,“两部分”是一个表格和文本框。所以正确的答案是'Forms(Forms!foo!bar)!txtCurrentAdd1 = rst!Line1'(或者某些变体的语法,当然) – phoog

+0

@phhog,我会接受set corection,但是我指的是第二部分不能是文本框 - 操作说的形式!foo!栏然后引用文本框,栏不能是文本框,它不能是子窗体。 – Fionnuala

5

您可以访问其他形式的控制是这样的:

Dim FormName As String 
Dim ControlName As String 

FormName = "YourForm" 
ControlName = "YourTextbox" 

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

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

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

为了传递来电者的姓名。

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

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的实例保持打开状态以进行调试。

相关问题