Forms 在access 2007表单中键入时如何更新另一个文本框?

Forms 在access 2007表单中键入时如何更新另一个文本框?,forms,ms-access,textbox,Forms,Ms Access,Textbox,我有几个文本框,必须用0到100之间的数值填充。在它们下面有另一个文本框,代表总计(上面文本框中的值之和)。在键入上述任何其他文本框时,如何更新总和文本框?这是一个问题,因为Access中有一个愚蠢的要求,即必须先将焦点设置为文本区域,然后才能获取其值。我建议您更改您的设计,以便文本字段在按钮单击时更新,而不是在更改时更新 如果您想转到“更改时更新”路径,您可以将更改事件附加到每个加数文本字段。事件处理程序需要保存插入符号位置/选择长度,更新输出文本字段中的总和,并恢复插入符号位置。您需要保存/

我有几个文本框,必须用0到100之间的数值填充。在它们下面有另一个文本框,代表总计(上面文本框中的值之和)。在键入上述任何其他文本框时,如何更新总和文本框?

这是一个问题,因为Access中有一个愚蠢的要求,即必须先将焦点设置为文本区域,然后才能获取其值。我建议您更改您的设计,以便文本字段在按钮单击时更新,而不是在更改时更新

如果您想转到“更改时更新”路径,您可以将更改事件附加到每个加数文本字段。事件处理程序需要保存插入符号位置/选择长度,更新输出文本字段中的总和,并恢复插入符号位置。您需要保存/恢复插入符号位置,因为当焦点更改时,插入符号位置将丢失

下面是两个文本字段(txt1和txt2)的示例。输出字段名为txtOutput

Private Sub txt1_Change()
    Dim caret_position As Variant

    caret_position = Array(txt1.SelStart, txt1.SelLength)

    UpdateSum

    txt1.SetFocus
    txt1.SelStart = caret_position(0)
    txt1.SelLength = caret_position(1)
End Sub

Private Sub txt2_Change()
    Dim caret_position As Variant

    caret_position = Array(txt2.SelStart, txt2.SelLength)

    UpdateSum

    txt2.SetFocus
    txt2.SelStart = caret_position(0)
    txt2.SelLength = caret_position(1)
End Sub

Private Sub UpdateSum()
    Dim sum As Variant
    sum = CDec(0)

    txt1.SetFocus
    If IsNumeric(txt1.Text) Then
        sum = sum + CDec(txt1.Text)
    End If

    txt2.SetFocus
    If IsNumeric(txt2.Text) Then
        sum = sum + CDec(txt2.Text)
    End If

    txtOutput.SetFocus
    txtOutput.Text = sum
End Sub

如果您很高兴在框更新后(按下enter、tab或类似按钮),总和框会更新,则无需任何代码即可完成此操作。首先,需要将要求和的文本框的格式设置为数字,然后求和框的控制源变为:

=Nz([text0],0)+Nz([text2],0)+Nz([text4],0)+Nz([text6],0)+Nz([text8],0) ...
注意使用Nz时,可以通过设置要求和的各种文本框的默认值属性来消除这种情况


需要以这种方式求和的一大组控件通常表示数据库设计中存在错误。你通常会认为这类事情是一个单独的记录集,可以更容易地进行汇总。

我知道这是一个古老的话题,但是谷歌没有为这个话题想出很多东西,这个帖子也没有真正的帮助。我能够想出一个非常简单的方法来做到这一点,所以希望其他任何人都会发现这一点很有帮助

我需要的是实际文本,而不是数字,但同样的情况也适用

要执行OP要求的操作,您至少需要3个文本框。1是每次键入时要更新的文本框,2是要键入的文本框,3是隐藏的文本框

将文本框1设置为引用其控制源中隐藏文本框3的值:

="something in my textbox " & [textbox3]
在文本框2的OnChange事件中,右键一行,将隐藏文本框3的值设置为您正在键入的文本框2的Text属性:

Private Sub textbox2_Change()
    Me.textbox3.Value = Me.textbox2.Text
End Sub

每次更新隐藏文本框3的值时,显示的文本框1中的计算/参考都将更新。无需保存插入符号位置或本文中提到的任何其他内容。

在Access 2007中,我可以使用文本框的On Lost Focus事件来完成此操作。 只需在要添加的每个文本框的on Lost focus事件中添加类似的内容,只需确保将每个文本框的默认值设置为0

Me.Totals.Value=Me.Text1.Value+Me.Text2.Value+等


当你点击下一个文本框或任何失去焦点的地方时,你的总数就会出现在总数框中。您可以添加任意数量的文本框,只需将它们包含在代码中。

控件必须具有焦点才能获取值,这是完全不真实的。控件必须具有焦点才能获取文本属性,而不是值属性。感谢您的更正。然而,Value属性在事件处理程序中是过时的,因此在这种情况下,您需要使用文本才能使其工作。我恐怕也不是这样。仅当控件未失去焦点时,才需要使用text属性,如果是这种情况,则text属性可用,尽管它可能不是最终值。是否可以使用计算总数的标签而不是可编辑的文本框?