我有一些TextBoxes编程,显示基于成本,数量和税收的计算结果。问题是,如果我将税箱编程为退出时格式化为百分比,则在操作后不再进行计算,因为该框变为字符串类型。这是正常的行为吗?有办法解决这个问题吗?货币格式的TextBoxes带来正常的计算结果。问题只是百分比问题......
PS。:我使用常见的格式化方法:
Private Sub BoxIPI_Exit(ByVal Cancel As MSForms.ReturnBoolean)
BoxIPI = Format(BoxIPI, "percent")
End Sub
代码很长,因为需要大量的计算,但是,简而言之,我将计算de IPI的部分联合起来,作为一个例子(变量是公共的):
If IsNumeric(.BoxQtd.Text) = True Then
Quantidade = .BoxQtd
Else: Quantidade = 0
End If
If IsNumeric(.BoxVendaU.Text) = True Then
VendaUni = .BoxVendaU
Else: VendaUni = 0
End If
If IsNumeric(.BoxIPI.Text) = True Then
IPI = CDbl(.BoxIPI)
Else: IPI = 0
End If
VIPI = (Quantidade * VendaUni) * IPI
.BoxValorIPI = Format(VIPI, "currency")
答案 0 :(得分:0)
在没有看到您的代码的情况下,我决定为您提供一个很好的例子来了解如何处理您的问题。
Private Sub CommandButton1_Click()
If InStr(TextBox1.Value, "%") > 0 Then
myValue1 = Mid(TextBox1.Value, 1, InStr(TextBox1.Value, "%") - 1)
myValue1 = myValue1 / 100
End If
myValue2 = TextBox2.Value
myValue3 = myValue1 * myValue2
TextBox3.Value = myValue3
Debug.Print "v1 "; myValue1
Debug.Print "v2 "; myValue2
Debug.Print "v3 "; myValue3
End Sub
您的代码存在的问题是
If IsNumeric(.BoxIPI.Text) = True Then
IPI = CDbl(.BoxIPI)
Else: IPI = 0
End If
%符号使编译器认为BoxIPI.Value不是数字。使用它将解决您的问题
If IsNumeric(Mid(TextBox1.Value, 1, InStr(TextBox1.Value, "%") - 1)) Then
myValue1 = Mid(TextBox1.Value, 1, InStr(TextBox1.Value, "%") - 1)
myValue1 = myValue1 / 100
End If
当然你不需要使用我的十进制除法,因为你可以根据你的原因进行调整,当然也可以改变" TextBox1"到BoxIPI,但你明白了这一点:)