防止Word 2003中的十进制截断

时间:2012-11-14 14:54:01

标签: vba ms-word word-vba

我有一个文档模板,可以通过外部Web服务自动填充。传入的数据以货币形式存在(例如3.10)但是当它传递到Word文档模板时,变量被截断以删除任何尾随的0。我需要数字总是以2位小数出现,即使它们都是0。

这是2003版的Word,我没有使用其他版本进行测试,因为我们需要使用该版本的Word生成所有文档模板。

1 个答案:

答案 0 :(得分:1)

您应该能够在宏中使用格式化功能来执行此操作:

    Format(yourValue, "Currency")

要让用户输入只能接受货币格式化值的文本框,我使用了这样的宏:

Private Function getValue(text As String) As Currency
    If text = "" Then
        getValue = 0
    Else
        getValue = CCur(Val(RemoveNonNumeric(text)))
    End If
End Function

Private Function RemoveNonNumeric(inputStr As String) As String
    Const NUMERIC_CHARS = "0123456789."

    Dim result As String
    Dim currCharIndex As Long
    Dim currentString As String
    Dim deciCount As Integer
    Dim afterDeciCount As Integer

    deciCount = 0
    afterDeciCount = 0

    For currCharIndex = 1 To Len(inputStr)
        currentString = Mid$(inputStr, currCharIndex, 1)

        If currentString = "." Then deciCount = deciCount + 1

        If InStr(1, NUMERIC_CHARS, currentString) > 0 And deciCount < 2 And afterDeciCount < 3 Then
            result = result + currentString
            If deciCount > 0 Then afterDeciCount = afterDeciCount + 1
        End If
    Next

    result = result

    RemoveNonNumeric = result
End Function