Here is a function to convert an integer to Spanish words. Maybe it will be of some use to somebody. There is probably a much more elegant way to do this but this worked for me and is correct as far as I can see.
Code:Private Function ConvertToWords(ByRef Value As Integer) As String Dim Strng As String 'holds string representation of Value Strng = CStr(Value) Dim Txt As String 'holds the word string as it is being built Dim Curr As String 'holds the currency word Curr = "Euros" Dim Temp As String 'used to work on a single digit at a time Dim Units(12) As String Units(0) = "zero" Units(1) = "uno" Units(2) = "dos" Units(3) = "tres" Units(4) = "cuatro" Units(5) = "cinco" Units(6) = "seis" Units(7) = "siete" Units(8) = "ocho" Units(9) = "nueve" Units(10) = "nove" Units(11) = "sete" Units(12) = "quin" Dim Tens(9) As String Tens(0) = "" Tens(1) = "diez" Tens(2) = "veinte" Tens(3) = "treinta" Tens(4) = "cuarenta" Tens(5) = "cincuenta" Tens(6) = "sesenta" Tens(7) = "setenta" Tens(8) = "ochenta" Tens(9) = "noventa" Dim Teens(5) Teens(1) = "once" Teens(2) = "doce" Teens(3) = "trece" Teens(4) = "catorce" Teens(5) = "quince" Txt = "" 'hundreds If Len(Strng) = 3 Then 'there are hundreds Temp = Left(Right(Strng, 3), 1) 'take the "hundreds" digit If Temp = "5" Then Temp = "12" 'set stem for 500s as "quin" If Temp = "7" Then Temp = "11" 'account for siete-sete change in 700's If Temp = "9" Then Temp = "10" 'account for nueve-nove change in 900's Txt = Units(CInt(Temp)) 'set the hundreds word according to units list If Temp = "1" Then 'the 100's is a special case. Only say "hundred" not "one hundred" If Right(Strng, 2) = "00" Then 'also exactly 100 is a special case. Txt = "Cien" Else Txt = "ciento" 'not exactly 100 so add correct "hundreds" word End If Else If Temp = "12" Then Txt = Txt & "ientos" 'add correct ending for 500's Else Txt = Txt & "cientos" 'more than 100 so make 200,300,400 etc End If End If End If 'tens If Len(Strng) <= 3 Then 'ignore numbers over 999 Temp = Right(Strng, 2) 'take the tens and units If Temp >= "11" And Temp <= "15" Then Txt = Txt & " " & Teens(CInt(Temp) - 10) '11 to 15 are special words. Take them from Teens array Else 'tens If Len(Temp) > 1 Then 'take the tens digit Txt = Txt & " " & Tens(CInt(Left(Temp, 1))) 'and add it to the word list End If 'units If Len(Temp) > 1 Then 'deal if the value is 10 or more If CInt(Right(Temp, 1)) <> "0" Then If CInt(Left(Temp, 1)) = "1" Then 'if the tens begin with "1" need to change the spelling Txt = Left(Txt, Len(Txt) - 1) & "ci" & Units(CInt(Right(Temp, 1))) ElseIf CInt(Left(Temp, 1)) = "2" Then 'if tens begins with "2" change spelling differently Txt = Left(Txt, Len(Txt) - 1) & "i" & Units(CInt(Right(Temp, 1))) Else If Left(Temp, 1) = "0" Then 'check for whole 10's Txt = Txt & Units(CInt(Right(Temp, 1))) Else Txt = Txt & " y " & Units(CInt(Right(Temp, 1))) 'if not divisible by 10, add the units End If End If End If Else Txt = Txt & Units(CInt(Temp)) 'this adds units to the hundreds End If End If End If If Temp = "1" Then Txt = Txt & " " & Left(Curr, Len(Curr) - 1) 'remove the "s" for just a single Euro Else Txt = Txt & " " & Curr End If Txt = Trim(Txt) 'remove surplus spaces before and after string Txt = UCase(Left(Txt, 1)) & Right(Txt, (Len(Txt) - 1)) 'capitalise the first letter ConvertToWords = Txt 'return the string End Function




Reply With Quote