我有几个文本框必须填充0到100之间的数值。在它们下面还有另一个文本框,代表一个总数(上面文本框中值的总和)。如何在输入上面的任何其他文本框时更新总和文本框?
答案 0 :(得分:1)
如果您对更新框更新后的总和框感到满意(按下输入,选项卡等),则可以在没有任何代码的情况下完成此操作。首先,您需要将文本框的格式设置为数字,然后总和框的控件来源变为:
=Nz([text0],0)+Nz([text2],0)+Nz([text4],0)+Nz([text6],0)+Nz([text8],0) ...
注意使用Nz,可以通过设置各个文本框的默认值属性来消除它。
需要以这种方式求和的大量控件通常表示数据库设计中存在错误。你通常会期望这种事情是一个单独的记录集,可以更容易地总结。
答案 1 :(得分:1)
我知道这已经过时了,但谷歌并没有为这个主题提出太多建议,而且这个主题也没有真正帮助。我能够找到一种非常简单的方法来做到这一点,所以希望其他任何寻找这个的人都会觉得这很有帮助。
我需要的是实际文本而不是数字,但同样适用。
要做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中的计算/引用。无需保存插入符号位置或本文中提到的任何其他内容。
答案 2 :(得分:0)
通过使用文本框的“丢失焦点”事件,我能够在Access 2007中做到这一点。 只需在要添加的每个文本框的On Lost focus事件上放置类似的内容,只需确保将每个文本框的默认值设置为0即可。
Me.Totals.Value = Me.Text1.Value + Me.Text2.Value +等等。
当您单击下一个文本框或只要失去焦点时,在任何地方,您的总和将已经在总计框中。您可以根据需要添加任意多个文本框,只需将它们包括在代码中即可。
答案 3 :(得分:-2)
由于Access中的asinine要求,您必须先将焦点设置到文本区域才能获得其值,这是有问题的。我建议您更改设计,以便更新文本字段以响应按钮单击而不是更改。
如果您想要进行更新后更新路线,则可以将更改事件附加到每个加数文本字段。事件处理程序需要保存插入位置/选择长度,更新输出文本字段中的总和,并恢复插入位置。您需要保存/恢复插入位置,因为焦点更改时会丢失。
以下是两个文本字段(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