texbox计算不正确

时间:2018-09-30 02:29:44

标签: excel vba excel-vba

我正在运行此代码,该代码应该将两个文本框的值相加,如果数量成千上万,那么两个文本框的值正确到999,结果返回为2.00,这是我的代码:

Private Sub Txtunitcost_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Me.TxtTotal.Value = Val(Me.TxtQty.Value) * Val(Me.TxtUnitCost.Value)
   TxtTotal.Value = Format(TxtTotal.Value, ("#,##0.00;-#,##0.00"))
   TxtUnitCost.Value = Format(TxtUnitCost.Value, ("#,##0.00;-#,##0.00"))

End Sub

2 个答案:

答案 0 :(得分:0)

怎么样:

Private Sub Txtunitcost_Exit(ByVal Cancel As MSForms.ReturnBoolean)

Dim TxtQty, TxtUnitCost, TxtTotat as Long

TxtQty = Format(Me.TxtQty.Value, ("#,##0.00;-#,##0.00"))
TxtUnitCost = Format(Me.TxtQty.Value, ("#,##0.00;-#,##0.00"))
TxtTotat = Format(TxtQty * TxtUnitCost, ("#,##0.00;-#,##0.00"))

End Sub

答案 1 :(得分:0)

对于您的代码,一种快速的解决方法是像这样在计算过程中删除千位分隔符

Private Sub Txtunitcost_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    txtUnitCost = Replace(txtUnitCost, Application.ThousandsSeparator, "")

    Me.txtTotal.Value = Val(Me.txtQty.Value) * Val(Me.txtUnitCost.Value)
    txtTotal.Value = Format(txtTotal.Value, ("#,##0.00;-#,##0.00"))
    txtUnitCost.Value = Format(txtUnitCost.Value, ("#,##0.00;-#,##0.00"))

End Sub

为进一步说明,请查看以下代码的输出

Sub Test()
    Debug.Print Val("1000,00"), Val("1.000,00")
End Sub
 1000          1 

对于我来说,字符串代表千位(德语版本,取决于千位分隔符),但是由于千位分隔符,转换结果有所不同。

快速解决方法是

    Sub Test()
        Dim s1 As String
        Dim s2 As String

        s1 = "1000,00"
        s2 = "1.000,00"

        Debug.Print Val(s1), Val(s2), Val(Replace(s2, _ 
                                     Application.ThousandsSeparator, ""))

   End Sub

        1000          1             1000 

最好使用CLng或CDbl代替Val,因为

  

Val函数停止读取字符串的第一个字符   无法识别为数字的一部分。

所以更好的解决方法是

Private Sub Txtunitcost_Exit(ByVal Cancel As MSForms.ReturnBoolean)

    Me.txtTotal.Value = CDbl(Me.txtQty.Value) * CDbl(Me.txtUnitCost.Value)
    txtTotal.Value = Format(txtTotal.Value, ("#,##0.00;-#,##0.00"))
    txtUnitCost.Value = Format(txtUnitCost.Value, ("#,##0.00;-#,##0.00"))

End Sub

以上文档中也对此进行了说明

  

注意:Val()识别的唯一有效的十进制分隔符   函数是句点(。)。如果您使用其他小数点分隔符,   像某些国际应用程序一样,改用CDbl函数。