se puede programar directamente en vb, la verdad que no sé si hay alguna dll dando vueltas que te facilite las cosas, yo te paso un modulo que armé y anda bastante bien, lo unico es que lo uso con vb studio, no sé como lo podes poner en el de excel porque no programé mucho de esa forma pero espero te sirva.
Código:
Function ImporteEnLetras(pImporte As String, pSepDecimal As String, pCharPorLinea As Integer, pDesMoneda As String, pDesCentavos As String, pDecimalesEnNumeros As Boolean) As String
Dim tmpEntero(9) As String
Dim tmpDecimal(2) As String
Dim tmpImporteEnLetras As String
Dim tmpLetrasFinal As String
Dim tmpEsDecimal As Boolean
Dim tmpImporte As String
Dim tmpEnteros As String
Dim tmpDecimales As String
Dim tmpChar As String * 1
Dim i As Integer
Dim tmpLargoImporte As Integer
Dim tmpLargoEnteros As Integer
Dim tmpPosicion As Integer
Dim tmpDigito As Integer
Dim tmpCantChar As Integer
Dim tmpPalabra As String
ImporteEnLetras = ""
tmpImporteEnLetras = ""
tmpLetrasFinal = ""
tmpImporte = Trim(pImporte)
tmpEsDecimal = False
tmpEnteros = ""
tmpDecimales = ""
For i = 1 To Len(tmpImporte)
tmpChar = Mid(tmpImporte, i, 1)
If tmpChar <> pSepDecimal And (Asc(tmpChar) < 48 Or Asc(tmpChar) > 57) Then
Exit Function
End If
Next i
For i = 1 To 9
tmpEntero(i) = "0"
Next i
tmpLargoImporte = Len(tmpImporte)
For tmpPosicion = 1 To tmpLargoImporte
tmpChar = Mid(tmpImporte, tmpPosicion, 1)
If tmpChar = pSepDecimal Then
tmpEsDecimal = True
Else
If tmpEsDecimal = True Then
tmpDecimales = tmpDecimales + tmpChar
Else
tmpEnteros = tmpEnteros + tmpChar
End If
End If
Next tmpPosicion
tmpDecimales = Left(tmpDecimales + "00", 2)
tmpLargoEnteros = Len(tmpEnteros)
For tmpDigito = tmpLargoEnteros To 1 Step -1
tmpEntero(tmpDigito) = Mid(tmpEnteros, (tmpLargoEnteros - tmpDigito + 1), 1)
Next tmpDigito
If (tmpEntero(9) <> "0" Or tmpEntero(8) <> "0" Or tmpEntero(7) <> "0") Then
tmpImporteEnLetras = tmpImporteEnLetras + ConvierteLetras(tmpEntero(9), tmpEntero(8), tmpEntero(7))
If (tmpEntero(9) = "0" And tmpEntero(8) = "0" And tmpEntero(7) = "1") Then
tmpImporteEnLetras = tmpImporteEnLetras + "millon "
Else
tmpImporteEnLetras = tmpImporteEnLetras + "millones "
End If
End If
If (tmpEntero(6) <> "0" Or tmpEntero(5) <> "0" Or tmpEntero(4) <> "0") Then
If (tmpEntero(6) = "0" And tmpEntero(5) = "0" And tmpEntero(4) = "1") Then
Else
tmpImporteEnLetras = tmpImporteEnLetras + ConvierteLetras(tmpEntero(6), tmpEntero(5), tmpEntero(4))
End If
tmpImporteEnLetras = tmpImporteEnLetras + "mil "
End If
tmpImporteEnLetras = tmpImporteEnLetras + ConvierteLetras(tmpEntero(3), tmpEntero(2), tmpEntero(1))
If tmpEntero(1) = "1" Then tmpImporteEnLetras = Left(tmpImporteEnLetras, Len(tmpImporteEnLetras) - 1) + "o "
'If Decimales<>"00" Then
If tmpImporteEnLetras = "" Then tmpImporteEnLetras = "cero "
If pDecimalesEnNumeros = True Then
tmpImporteEnLetras = tmpImporteEnLetras + pDesMoneda + " con " + tmpDecimales + "/100 " + pDesCentavos
Else
tmpDecimal(1) = Mid(tmpDecimales, 1, 1)
tmpDecimal(2) = Mid(tmpDecimales, 2, 1)
tmpImporteEnLetras = tmpImporteEnLetras + pDesMoneda + " con " + ConvierteLetras("0", tmpDecimal(1), tmpDecimal(2)) + pDesCentavos
End If
'End If
tmpImporteEnLetras = RTrim(tmpImporteEnLetras)
If Len(tmpImporteEnLetras) <= pCharPorLinea Then
tmpLetrasFinal = tmpImporteEnLetras
Else
tmpCantChar = 0
tmpPalabra = ""
For i = 1 To Len(tmpImporteEnLetras)
tmpCantChar = tmpCantChar + 1
tmpChar = Mid(tmpImporteEnLetras, i, 1)
If tmpChar = " " Then
tmpLetrasFinal = tmpLetrasFinal + tmpPalabra
tmpPalabra = ""
If tmpCantChar < pCharPorLinea Then tmpLetrasFinal = tmpLetrasFinal + tmpChar
Else
tmpPalabra = tmpPalabra + tmpChar
End If
If tmpCantChar > pCharPorLinea Then
tmpCantChar = Len(tmpPalabra)
tmpLetrasFinal = tmpLetrasFinal + Chr(10)
End If
Next i
tmpLetrasFinal = tmpLetrasFinal + tmpPalabra
End If
ImporteEnLetras = UCase(tmpLetrasFinal)
End Function
Function ConvierteLetras(pDigito3 As String, pDigito2 As String, pDigito1 As String) As String
Dim tmpLetras As String
ConvierteLetras = ""
tmpLetras = ""
Select Case pDigito3
Case "0"
Case "1"
If pDigito2 = "0" And pDigito1 = "0" Then
tmpLetras = tmpLetras + "cien "
Else
tmpLetras = tmpLetras + "ciento "
End If
Case "2"
tmpLetras = tmpLetras + "doscientos "
Case "3"
tmpLetras = tmpLetras + "trescientos "
Case "4"
tmpLetras = tmpLetras + "cuatrocientos "
Case "5"
tmpLetras = tmpLetras + "quinientos "
Case "6"
tmpLetras = tmpLetras + "seiscientos "
Case "7"
tmpLetras = tmpLetras + "setecientos "
Case "8"
tmpLetras = tmpLetras + "ochocientos "
Case "9"
tmpLetras = tmpLetras + "novecientos "
Case Else
Exit Function
End Select
Select Case pDigito2
Case "0"
Case "1"
Select Case pDigito1
Case "0"
tmpLetras = tmpLetras + "diez "
Case "1"
tmpLetras = tmpLetras + "once "
Case "2"
tmpLetras = tmpLetras + "doce "
Case "3"
tmpLetras = tmpLetras + "trece "
Case "4"
tmpLetras = tmpLetras + "catorce "
Case "5"
tmpLetras = tmpLetras + "quince "
Case "6"
tmpLetras = tmpLetras + "dieciseis "
Case "7"
tmpLetras = tmpLetras + "diecisiete "
Case "8"
tmpLetras = tmpLetras + "dieciocho "
Case "9"
tmpLetras = tmpLetras + "diecinueve "
Case Else
Exit Function
End Select
Case "2"
If pDigito1 = "0" Then
tmpLetras = tmpLetras + "veinte "
Else
tmpLetras = tmpLetras + "veinti"
End If
Case "3"
tmpLetras = tmpLetras + "treinta "
Case "4"
tmpLetras = tmpLetras + "cuarenta "
Case "5"
tmpLetras = tmpLetras + "cincuenta "
Case "6"
tmpLetras = tmpLetras + "sesenta "
Case "7"
tmpLetras = tmpLetras + "setenta "
Case "8"
tmpLetras = tmpLetras + "ochenta "
Case "9"
tmpLetras = tmpLetras + "noventa "
Case Else
Exit Function
End Select
If Val(pDigito2) >= 3 And pDigito1 <> "0" Then tmpLetras = tmpLetras + "y "
If pDigito2 <> "1" Then
Select Case pDigito1
Case "0"
Case "1"
tmpLetras = tmpLetras + "un "
Case "2"
tmpLetras = tmpLetras + "dos "
Case "3"
tmpLetras = tmpLetras + "tres "
Case "4"
tmpLetras = tmpLetras + "cuatro "
Case "5"
tmpLetras = tmpLetras + "cinco "
Case "6"
tmpLetras = tmpLetras + "seis "
Case "7"
tmpLetras = tmpLetras + "siete "
Case "8"
tmpLetras = tmpLetras + "ocho "
Case "9"
tmpLetras = tmpLetras + "nueve "
Case Else
Exit Function
End Select
End If
ConvierteLetras = tmpLetras
End Function
y se usa así:
text1.text = ImporteEnLetras(dblValor, ".", "100", "PESOS", "CENTAVOS", True)
dblValor = Valor númerico pero guardado en una varieble de tipo String que va a ser convertido a letras
"."= Caracter de separación decimal
"100"= Cantidad de Carcteres por linea del resultado
"PESOS"= Nombre de la moneda
"CENTAVOS"= Descripción que se le dá al resultado decimal
True= Si se le pasa true los decimales los representa en números, si se le pasa false los decimales son tamien comvertidos a letras