请问那位大侠能给我提供将金额
数字转换人民币大写方式的源代码?[email protected]在此先谢过,给分。

解决方案 »

  1.   

    '转换阿拉伯数字为中文人民币大写--------------------------------------------
    '调用:Msgbox NtoC(123.45)
    Public Function NtoC(ByVal sNum As String, _
        Optional BITs As String = ",拾,佰,仟", _
        Optional UNITs As String = ",[万],[亿],[兆],[万兆]", _
        Optional ByVal Yuan As String = "圆", _
        Optional ByVal Jiao As String = "角", _
        Optional ByVal Fen As String = "分") As String
        
        sNum = sNum
        If Val(sNum) < 0 Then
            NtoC = "零" & Yuan
            Exit Function
        End If
        
        
        Dim sIntD, sDecD As String
        Dim i, iCount, j, iLength As Integer
        Dim lStartPos As Long
        Dim sBIT() As String, sUNIT() As String, sCents(2) As String
            
        sBIT = VBA.Split(BITs, ",")
        sUNIT = VBA.Split(UNITs, ",")
        sCents(0) = Fen
        sCents(1) = Jiao
        Dim temp As String
        If InStr(sNum, ".") > 0 Then
            temp = Left(sNum, InStr(sNum, ".") - 1)
        Else
            temp = sNum
        End If
        iCount = IIf(Len(temp) Mod 4, Len(Trim(temp)) \ 4 + 1, Len(Trim(temp)) \ 4)
        lStartPos = 1
        For i = iCount To 1 Step -1
            If i = iCount And Len(Trim(temp)) Mod 4 <> 0 Then
                iLength = Len(Trim(temp)) Mod 4
            Else
                iLength = 4
            End If
            sIntD = Mid(Trim(temp), lStartPos, iLength)
            For j = 1 To Len(Trim(sIntD))
                If Val(Mid(sIntD, j, 1)) <> 0 Then
                    NtoC = NtoC & Choose(Val(Mid(sIntD, j, 1)), _
                        "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖") & _
                        sBIT(Len(Trim(sIntD)) - j)
                Else
                    If Val(Mid(sIntD, j + 1, 1)) <> 0 Then
                        NtoC = NtoC & "零"
                    End If
                End If
            Next j
            lStartPos = lStartPos + iLength
            If i < iCount Then
                If (Val(Mid(sIntD, Len(Trim(sIntD)), 1)) <> 0 Or _
                    Val(Mid(sIntD, Len(Trim(sIntD)) - 1, 1)) <> 0 Or _
                    Val(Mid(sIntD, Len(Trim(sIntD)) - 2, 1)) Or _
                    Val(Mid(sIntD, Len(Trim(sIntD)) - 3, 1)) <> 0) Then
                    If i < UBound(sUNIT) + 1 Then
                        NtoC = NtoC & sUNIT(i - 1)
                        'Else
                        'NtoC = NtoC & sUNIT(i - 1)
                    End If
                End If
            Else
            'If i < UBound(sUNIT) + 1 Then
                NtoC = NtoC & sUNIT(i - 1)
            'End If
            End If
        Next
        If Len(Trim(NtoC)) > 0 Then
            NtoC = NtoC & Yuan
        End If
        '小数
        If InStr(1, sNum, ".") <> 0 Then
            sDecD = Right(sNum, Len(sNum) - InStr(1, sNum, "."))
            For i = 1 To Len(Trim(sDecD))
                If Val(Mid(Trim(sDecD), i, 1)) <> 0 Then
                    NtoC = NtoC & Choose(Val(Mid(Trim(sDecD), i, 1)), _
                        "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖")
                    NtoC = NtoC & sCents(2 - i)
                    If i >= 2 Then Exit For
                Else
                    If Len(Trim(NtoC)) > 0 Then NtoC = NtoC & "零"
                End If
            Next i
        Else
            NtoC = NtoC & "整"
        End If
    End Function