在数字表单控件中使用表达式

时间:2015-04-29 00:37:11

标签: ms-access access-vba

我有一个Access表单,其中一个文本框绑定到表中的货币字段。正如所料,除数字条目之外的任何内容都会产生错误。有时,用户需要输入多个金额并将这些金额加在一起,然后将结果输入货币字段。

为了实现这一点,我希望用户输入一个等号后跟一个有效的算术字符串,该字符串将与Excel单元格中的数字完全相同。例如,如果用户输入“= 5.31 + 2”,我希望该字段评估为“7.31”,并将其用作更新或保存记录时传递给表的值。目前的解决方法是使用Calculator应用程序,但这不是理想的解决方案。

我尝试了以下代码并将其应用于文本框的BeforeUpdate和OnLostFocus事件(名为“tbxTotal_Paid”),但都没有奏效。我只是得到“您输入的值对此字段无效”错误。

Dim charCt As Integer
Dim evalStr As String

If Left(tbxTotal_Paid, 1) = "=" Then
    charCt = Len(tbxTotal_Paid)
    evalStr = Right(tbxTotal_Paid, charCt - 1)
    Me.tbxTotal_Paid = CCur(evalStr)
End If

这只是将代码应用于不正确的事件,还是编码问题?任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

对我来说,你的代码看起来不错,但你可能把它放在错误的地方。

就像你说Acess给你这个错误,因为文本框绑定到货币字段。所以它永远不会接受非数值,因为值检查代码甚至在before_update事件之前触发。

我认为最好的解决方案是使用Me.tbxTotal_Paid.Visible = False隐藏绑定文本框并创建未绑定的代理文本框。您将代码放在代理的beforeUpdate-Event或Change-Event中。最后,您应该使用IsNumeric()检查最终结果。这样,您的代理文本框只会将正确的值写入绑定的隐藏文本框,只有数字到达您的表格。

另一种方法是将货币列更改为字符串字段,但由于数据库中可能存在错误数据,因此这不明智。