Wrote this module many years ago... here you go (English and Spanish)
Public Function ConvertCurrencyToText(ByVal curAmount, _
Optional fNumericCents As Boolean = True, _
Optional fDollarText As Boolean = True, _
Optional strLanguage As String = "English")
Dim temp
Dim Dollars, Cents
Dim DecimalPlace, Count
Dim sign As String
Dim strThousand As String
Dim strMillion As String
Dim strBillion As String
Dim strTrillion As String
Dim strSign As String
Dim strDollars As String
Dim strDollar As String
Dim strNo As String
Dim strOne As String
Dim strAnd As String
Dim strCents As String
Dim strCent As String
Dim strZero As String
Dim strDenom As String
If strLanguage = vbNullString Then
strLanguage = "English"
End If
Select Case strLanguage
Case "Spanish"
strThousand = "Mil"
strMillion = "Millones"
strBillion = "Billon"
strTrillion = "Trillon"
strSign = "Menos"
strDollar = "Peso"
strDollars = "Pesos"
strCent = "M.N."
strCents = "M.N."
strNo = "No"
strOne = "Uno"
strAnd = ""
strZero = "Cero"
strDenom = "/100"
Case Else
strThousand = "Thousand"
strMillion = "Million"
strBillion = "Billion"
strTrillion = "Trillion"
strSign = "Minus"
strDollar = "Dollar"
strDollars = "Dollars"
strCent = "Cent"
strCents = "Cents"
strNo = "No"
strOne = "One"
strAnd = "And"
strZero = "Zero"
strDenom = "/100"
End Select
ReDim Place(9) As String
Place(2) = " " & strThousand & " "
Place(3) = " " & strMillion & " "
Place(4) = " " & strBillion & " "
Place(5) = " " & strTrillion & " "
If curAmount < 0 Then
sign = strSign & " "
End If
' Convert curAmount to a string, trimming extra spaces.
curAmount = Abs(Trim(Str(curAmount)))
' Find decimal place.
DecimalPlace = InStr(curAmount, ".")
' If we find decimal place...
If DecimalPlace > 0 Then
' Convert cents
temp = Left(Mid(curAmount, DecimalPlace + 1) & "00", 2)
If fNumericCents = False Then
Cents = ConvertTens(temp, strLanguage)
Else
Cents = temp
End If
' Strip off cents from remainder to convert.
curAmount = Trim(Left(curAmount, DecimalPlace - 1))
End If
Count = 1
Do While curAmount <> ""
' Convert last 3 digits of curAmount to text.
temp = ConvertHundreds(Right(curAmount, 3), strLanguage)
If temp <> "" Then
If temp = "Uno" And Count >= 2 Then temp = ""
If Right$(temp, 3) = "Uno" And Count >= 2 Then temp = Left$(temp, Len(temp) - 1)
Dollars = temp & Place(Count) & Dollars
End If
If Len(curAmount) > 3 Then
' Remove last 3 converted digits from curAmount.
curAmount = Left(curAmount, Len(curAmount) - 3)
Else
curAmount = ""
End If
Count = Count + 1
Loop
' Clean up dollars.
If fDollarText = True And fNumericCents = False Then
Select Case Dollars
Case ""
Dollars = strNo & " " & strDollars
Case "One"
Dollars = strOne & " " & strDollar
Case Else
Dollars = Dollars & " " & strDollars
End Select
End If
If Dollars = "" Then Dollars = strZero
If fNumericCents = False Then
' Clean up cents.
Select Case Cents
Case ""
Cents = " " & strAnd & " " & strNo & " " & strCents
Case " " & strOne
Cents = " " & strAnd & " " & strOne & " " & strCent
Case Else
Cents = " " & strAnd & " " & Cents & " " & strCents
End Select
Else
If Cents = "" Then
Cents = " " & strAnd & " " & "00" & strDenom
Else
Cents = " " & strAnd & " " & Cents & strDenom
End If
End If
' tag denomination at end
If fDollarText = True And fNumericCents Then
If strLanguage = "Spanish" Then
Cents = " " & strDollars & " " & Cents & " " & strCents
Else
Cents = Cents & " " & strDollars
End If
End If
ConvertCurrencyToText = Trim(sign & Dollars & Cents)
End Function
Private Function ConvertDigit(ByVal MyDigit, Optional strLanguage As String = "English")
Dim strNum(9) As String
If strLanguage = vbNullString Then
strLanguage = "English"
End If
Select Case strLanguage
Case "Spanish"
strNum(1) = "Uno"
strNum(2) = "Dos"
strNum(3) = "Tres"
strNum(4) = "Cuatro"
strNum(5) = "Cinco"
strNum(6) = "Seis"
strNum(7) = "Siete"
strNum(8) = "Ocho"
strNum(9) = "Nueve"
Case Else
strNum(1) = "One"
strNum(2) = "Two"
strNum(3) = "Three"
strNum(4) = "Four"
strNum(5) = "Five"
strNum(6) = "Six"
strNum(7) = "Seven"
strNum(8) = "Eight"
strNum(9) = "Nine"
End Select
If MyDigit >= 1 And MyDigit <= 9 Then
ConvertDigit = strNum(Val(MyDigit))
Else
ConvertDigit = vbNullString
End If
End Function
Private Function ConvertHundreds(ByVal curAmount, Optional strLanguage As String = "English") As String
Dim result As String
Dim strHundred As String
If strLanguage = vbNullString Then
strLanguage = "English"
End If
Select Case strLanguage
Case "Spanish"
' do not set here
Case Else
strHundred = "Hundred"
End Select
' if there is nothing to convert.
If CCur(curAmount) <> 0 Then
' Append leading zeros to number.
curAmount = Right("000" & curAmount, 3)
' Do we have a hundreds place digit to convert?
If Left(curAmount, 1) <> "0" Then
If strLanguage = "Spanish" Then
Select Case Left(curAmount, 1)
Case 1
If curAmount = 100 Then result = "Cien" Else result = "Ciento"
Case 2: result = "Doscientos"
Case 3: result = "Trescientos"
Case 4: result = "Cuatrocientos"
Case 5: result = "Quinientos"
Case 6: result = "Seiscientos"
Case 7: result = "Setecientos"
Case 8: result = "Ochocientos"
Case 9: result = "Novecientos"
End Select
result = result & " "
Else
result = ConvertDigit(Left(curAmount, 1), strLanguage) & " " & strHundred & " "
End If
End If
' Do we have a tens place digit to convert?
If Mid(curAmount, 2, 1) <> "0" Then
result = result & ConvertTens(Mid(curAmount, 2), strLanguage)
Else
' If not, then convert the ones place digit.
result = result & ConvertDigit(Mid(curAmount, 3), strLanguage)
End If
ConvertHundreds = Trim(result)
End If
End Function
Private Function ConvertTens(ByVal MyTens, Optional strLanguage As String = "English") As String
Dim result As String
Dim strNum(29) As String
If strLanguage = vbNullString Then
strLanguage = "English"
End If
Select Case strLanguage
Case "Spanish"
strNum(2) = "Veinte"
strNum(3) = "Treinta"
strNum(4) = "Cuarenta"
strNum(5) = "Cincuenta"
strNum(6) = "Sesenta"
strNum(7) = "Setenta"
strNum(8) = "Ochenta"
strNum(9) = "Noventa"
strNum(10) = "Diez"
strNum(11) = "Once"
strNum(12) = "Doce"
strNum(13) = "Trece"
strNum(14) = "Catorce"
strNum(15) = "Quince"
strNum(16) = "Diesiseis"
strNum(17) = "Diesisiete"
strNum(18) = "Diesiocho"
strNum(19) = "Diesinueve"
strNum(20) = "Veinte"
strNum(21) = "Veinteuno"
strNum(22) = "Veintedos"
strNum(23) = "Veintetres"
strNum(24) = "Veintecuatro"
strNum(25) = "Veintecinco"
strNum(26) = "Veinteseis"
strNum(27) = "Veintesiete"
strNum(28) = "Veinteocho"
strNum(29) = "Veintenueve"
Case Else
strNum(2) = "Twenty"
strNum(3) = "Thirty"
strNum(4) = "Forty"
strNum(5) = "Fifty"
strNum(6) = "Sixty"
strNum(7) = "Seventy"
strNum(8) = "Eighty"
strNum(9) = "Ninety"
strNum(10) = "Ten"
strNum(11) = "Eleven"
strNum(12) = "Twelve"
strNum(13) = "Thirteen"
strNum(14) = "Fourteen"
strNum(15) = "Fifteen"
strNum(16) = "Sixteen"
strNum(17) = "Seventeen"
strNum(18) = "Eighteen"
strNum(19) = "Nineteen"
strNum(20) = "Twenty"
strNum(21) = "Twenty one"
strNum(22) = "Twenty two"
strNum(23) = "Twenty three"
strNum(24) = "Twenty four"
strNum(25) = "Twenty five"
strNum(26) = "Twenty six"
strNum(27) = "Twenty seven"
strNum(28) = "Twenty eight"
strNum(29) = "Twenty nine"
End Select
' Is value between 10 and 19?
If Val(Left(MyTens, 1)) = 1 Or Val(Left(MyTens, 1)) = 2 Then
result = strNum(Val(MyTens))
Else
' .. otherwise it's between 20 and 99.
result = strNum(Val(Left(MyTens, 1)))
' Convert ones place digit.
If strLanguage = "Spanish" Then
If Right(MyTens, 1) > 0 Then
result = result & " y " & ConvertDigit(Right(MyTens, 1), strLanguage)
Else
result = result
End If
Else
result = result & " " & ConvertDigit(Right(MyTens, 1), strLanguage)
End If
End If
ConvertTens = result
End Function