MS Access如何从子窗体获取另一个子窗体的值?

时间:2011-11-03 03:01:27

标签: ms-access vba access-vba

我有一个主窗体,其中包含两个其他子窗体。当子窗体(A)上的文本框值发生变化时,我想将子窗体(B)上的文本框的值设置为等于子窗体(A)上更改的文本框。

因此,对于Access来说,我做了一些谷歌搜索,看起来这可以用一些VBA实现这一点。所以在子表单(A)的文本框'更新'事件之后我添加了这个VBA。

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

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

谢谢!

4 个答案:

答案 0 :(得分:2)

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

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

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

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

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

您还可以单独在一行上键入Stop以触发中断模式。但是,您需要稍后将其删除。我提到的那些其他断点是临时的,不会保存在代码模块中。

然而,你进入中断模式,然后可以使用F8键一次一行地执行代码。这将显示执行哪些行。您还可以在中断模式下随时通过键入问号,变量名称,然后在立即窗口中输入Enter键来检查变量的值:

? MyVariable

浏览VB Editor的主菜单以查找其他调试选项。例如,监视窗口允许您在单步执行代码时监视所选变量的值。

答案 1 :(得分:1)

在您要更改的文本框的更新属性上,输入以下内容:

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

告诉我们你是怎么过的?

答案 2 :(得分:1)

您不必指定父表单的名称。

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

此致

答案 3 :(得分:0)

我知道这是6年前,但我认为这里的错误是您正在将formA的值更新为同一formA

Me.Parent.Forms.formA实际上是Me因为你打电话的原因:

  更新'事件后

子表单(A)的文本框

它应该是formB,并且应该放在“Form”之后(并且“Value”这个词不是强制性的):

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

您可以在这里了解更多信息如何Refer to Form and Subform properties and controls

此致