我正在运行此代码,该代码应该将两个文本框的值相加,如果数量成千上万,那么两个文本框的值正确到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
答案 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函数。