2011-11-03 154 views
3

我有一个主窗体包含两个其他子窗体。当子窗体(A)上的文本框值发生更改时,我希望将子窗体(B)上的文本框的值设置为等于子窗体(A)上已更改的文本框。MS Access如何从一个子窗体获取另一个子窗体的值?

所以对于Access来说是全新的我做了一些Google搜索,看起来这可以用一些VBA来实现。所以在子窗体(A)的文本框'更新后'事件中,我添加了这个VBA。

Private Sub ID_AfterUpdate() 
    Me.Parent.Forms.formA.textboxDestination.Value = Me.textboxSource.Value 
End Sub 

我正在使用代码生成器来执行此操作。然后我保存并运行表单。什么都没发生。没有错误..没什么,我甚至不知道这段代码正在运行。我甚至不确定在Access中如何调试VBA。有人可以帮我吗?

谢谢!

回答

2

控件的after update事件在用户更改其值时触发。如果ID绑定到自动编号字段,则在添加新记录时,数据库引擎将提供其值。但是,由于用户未做出更改,因此更新后事件不会触发。

对于一般调试目的,您可以添加一个Debug.Print或一个MsgBox语句。

Debug.Print "my event fired" 
MsgBox "my event fired" 

在VB编辑器的立即窗口中查看Debug.Print的输出。您可以使用Ctrl + g键盘快捷键从您的主Access窗口访问该窗口。

另一种技巧是在代码的一行上设置断点。右键单击代码行,然后从上下文菜单中选择Toggle-> Breakpoint。或者单击左边距,以便出现红点以标记断点。或者按F9键。或者从VB编辑器的主菜单中选择Debug-> Toggle Breakpoint。

您也可以在线上键入Stop来触发中断模式。但是,您需要稍后删除它。我提到的其他断点是临时的,不会保存在代码模块中。

但是,如果您进入中断模式,您可以使用F8键逐行执行一行代码。这会告诉你哪些行被执行。您也可以通过输入一个问号,那么变量名检查在中断模式下的任何时间变量的值,然后输入在立即窗口键:

? MyVariable 

探索VB编辑器的主菜单中找到额外的调试选项。例如,监视窗口将允许您在逐步执行代码时监视所选变量的值。

+0

我看。我怎么可以检测在这种情况下在自动递增领域的变化? – Nick

+0

我正在尝试!谢谢.. – Nick

1

在你改变文本框的更新属性,把下面的:

[Forms]![frmContainingValueYouWantToChange]![txtTextboxYouWantToChange] = "newValueHere" 

让我们知道你是怎么得到的?

1

您不必指定父窗体的名称。

Me.Parent.CONTROLNAME.Value是一种工作代码。

问候

+0

他没有指定父窗体的名称,而是另一个子窗体的名称“formA”: 'Me.Parent.Forms.formA.textboxDestination.Value' –

0

我知道这是6年前,但我觉得在这里的错误是你更新从formA值相同formA

Me.Parent.Forms.formA实际上igual到Me因为你美其名曰:

子窗体(A)的文本框 '更新后' 事件

应该formB和单词 “表” 应放在(和“价值”字不是强制性的)之后:

Private Sub textboxSource_AfterUpdate() 
    Me.Parent.formB.Form.textboxDestination.Value = Me.textboxSource.Value 
End Sub 

你可以在这里学习一些更多信息如何Refer to Form and Subform properties and controls

问候

相关问题