Pessoal, consegui um cdigo para converter para extenso. Testei umas 4 funes diferentes e cheguei nessa. Ela recursiva por isso bem menor e simples.
Crie um mtodo como:
ValorExtenso(Valor As Double, MoedaPlural As String, MoedaSingular As String) retornando string
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
' ValorExtenso
'
' Fonte: http://www.vbweb.com.br/dicas_visual.asp?Codigo=1162 (Mensagem postada em 14/7/2003 pelo usurio "Everest"
' Acessado em 18/nov/2014
'
' Adaptado para o Xojo por Tiago (baciotti@gmail.com)
' Data : 18/11/2014
'
' Objetivo: Recebe um Double e converte para o nmero por extenso.
'-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
'Fonte: http://www.vbweb.com.br/dicas_visual.asp?Codigo=1162
Dim StrValor As String, Negativo As Boolean
Dim Buf As String, Parcial As Integer
Dim Posicao as integer
dim Unidades(20) As String
Dim Dezenas(20) As String
dim Centenas(20) As String
dim PotenciasSingular(20) As String
Dim PotenciasPlural(20) As String
dim vbNullString as string=""
dim Extenso as String
Negativo = (Valor < 0)
Valor = Abs((Valor))
If Valor<>0 Then
Unidades = Array(vbNullString, "Um", "Dois", _
"Trs", "Quatro", "Cinco", _
"Seis", "Sete", "Oito", "Nove", _
"Dez", "Onze", "Doze", "Treze", _
"Quatorze", "Quinze", "Dezesseis", _
"Dezessete", "Dezoito", "Dezenove")
Dezenas = Array(vbNullString, vbNullString, _
"Vinte", "Trinta", "Quarenta", _
"Cinqenta", "Sessenta", "Setenta", _
"Oitenta", "Noventa")
Centenas = Array(vbNullString, "Cento", _
"Duzentos", "Trezentos", _
"Quatrocentos", "Quinhentos", _
"Seiscentos", "Setecentos", _
"Oitocentos", "Novecentos")
PotenciasSingular = Array(vbNullString, " Mil", _
" Milho", " Bilho", _
" Trilho", " Quatrilho")
PotenciasPlural = Array(vbNullString, " Mil", _
" Milhes", " Bilhes", _
" Trilhes", " Quatrilhes")
StrValor = Left(Format(Valor, "000000000000000000.000"), 18)
For Posicao = 1 To 18 Step 3
Parcial = Val(Mid(StrValor, Posicao, 3))
If Parcial<>0 Then
If Parcial = 1 Then
Buf = "Um" + PotenciasSingular((18 - Posicao) \\ 3)
ElseIf Parcial = 100 Then
Buf = "Cem" + PotenciasSingular((18 - Posicao) \\ 3)
Else
Buf = Centenas(Parcial \\ 100)
Parcial = Parcial Mod 100
If Parcial <> 0 And Buf <> vbNullString Then
Buf = Buf + " e "
End If
If Parcial < 20 Then
Buf = Buf + Unidades(Parcial)
Else
Buf = Buf + Dezenas(Parcial \\ 10)
Parcial = Parcial Mod 10
If Parcial <> 0 And Buf <> vbNullString Then
Buf = Buf + " e "
End If
Buf = Buf + Unidades(Parcial)
End If
Buf = Buf + PotenciasPlural((18 - Posicao) \\ 3)
End If
If Buf <> vbNullString Then
If Extenso <> vbNullString Then
Parcial = Val(Mid(StrValor, Posicao, 3))
If Posicao = 16 And (Parcial < 100 Or (Parcial Mod 100) = 0) Then
Extenso = Extenso + " e "
Else
Extenso = Extenso + ", "
End If
End If
Extenso = Extenso + Buf
End If
End If
Next
If Extenso <> vbNullString Then
If Negativo Then
Extenso = "Menos " + Extenso
End If
If clong(cstr(Valor)) = 1 Then
Extenso = Extenso + " " + MoedaSingular
Else
Extenso = Extenso + " " + MoedaPlural
End If
End If
'Parcial = clong((Valor - clong(Valor)) * 100 + 0.1)
Parcial = clong( cstr((cdbl(cstr(Valor)) - clong(cstr(Valor)) ) * 100 + 0.1))
If Parcial<>0 Then
Buf = ValorExtenso(Parcial, "Centavos", "Centavo")
If Extenso <> vbNullString Then
Extenso = Extenso + " e "
End If
Extenso = Extenso + Buf
End If
End If
return Extenso