输入 access 2007 表单时如何更新另一个文本框?
Posted
技术标签:
【中文标题】输入 access 2007 表单时如何更新另一个文本框?【英文标题】:How to update another text box while typing in access 2007 form? 【发布时间】:2012-01-01 21:06:25 【问题描述】:我有几个文本框,必须用从 0 到 100 的数值填充。在它们下面有另一个文本框,代表总数(上面文本框中的值的总和)。在上面的任何其他文本框中键入内容时,如何更新总和文本框?
【问题讨论】:
您可以为计算的总数使用标签而不是可编辑的文本框吗? 【参考方案1】:如果您对更新框(按 Enter、Tab 或类似键)后总和框更新感到满意,则无需任何代码即可完成。首先需要将要求和的文本框的格式设置为数值,那么求和框的控制源就变成了:
=Nz([text0],0)+Nz([text2],0)+Nz([text4],0)+Nz([text6],0)+Nz([text8],0) ...
注意 Nz 的使用,可以通过设置要求和的各种文本框的默认值属性来消除这种情况。
需要以这种方式求和的大量控件通常表明数据库设计存在错误。您通常会认为这种东西是一个单独的记录集,可以更容易地求和。
【讨论】:
【参考方案2】:我知道这已经过时了,但 Google 并没有为这个主题提供太多信息,而且这个帖子也没有真正的帮助。我想出了一个非常简单的方法来做到这一点,所以希望其他寻找这个的人会觉得这很有帮助。
我需要的是实际文本而不是数字,但同样适用。
要执行 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 中的计算/引用都会更新。无需保存插入符号位置或本文中提到的任何其他内容。
【讨论】:
【参考方案3】:通过使用文本框的 On Lost Focus 事件,我能够在 Access 2007 中执行此操作。 只需将这样的内容放在要添加的每个文本框的 On Lost 焦点事件上,只需确保将每个文本框的默认值设置为 0。
Me.Totals.Value = Me.Text1.Value + Me.Text2.Value + 等等..
当您单击下一个文本框或任何地方,只要它失去焦点,您的总和就会出现在“总计”框上。您可以添加任意数量的文本框,只需将它们包含在代码中即可。
【讨论】:
【参考方案4】:这是有问题的,因为 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
【讨论】:
控件必须具有焦点才能获取值是完全不正确的。控件必须具有焦点才能获取 text 属性,而不是 value 属性。 感谢指正。但是,Value 属性在事件处理程序中已过时,因此您需要在这种情况下使用 Text 才能使其正常工作。 恐怕这也不是真的。如果控件没有失去焦点,则只需要使用 text 属性,如果是这种情况,则 text 属性可用,尽管它可能不是最终值。以上是关于输入 access 2007 表单时如何更新另一个文本框?的主要内容,如果未能解决你的问题,请参考以下文章
如何根据 Access 2013 中的另一个输入字段更新表单上的字段?
如何在 Access 2007 中使用 Visual Basic 代码更新单元格
通过弹出子表单 (2) 添加新子表单 (1) 记录后重新查询子表单 (1) - Access 2007
Access 2007 / VBA - 多个表单实例,从模块更新特定实例的控件