以百分比格式框形式计算

时间:2016-12-07 14:16:37

标签: vba excel-vba excel

我有一些TextBoxes编程,显示基于成本,数量和税收的计算结果。问题是,如果我将税箱编程为退出时格式化为百分比,则在操作后不再进行计算,因为该框变为字符串类型。这是正常的行为吗?有办法解决这个问题吗?货币格式的TextBoxes带来正常的计算结果。问题只是百分比问题......

Form print with visual explanation

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")

1 个答案:

答案 0 :(得分:0)

在没有看到您的代码的情况下,我决定为您提供一个很好的例子来了解如何处理您的问题。

enter image description here

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,但你明白了这一点:)