Como convertir un numero a letras en un userform

Necesito que me ayuden con un problema en un formulario tengo un textbox en el cual ingreso un valor y lo que necesito es que al ingresar y salir de este textbox (evento exit) en otro textbox me aparezaca en letras el valor ingresado es decir cuando yo ingrese en el textbox1 25,325.25 y cambie al siguiente control en el textbox2 me aparezca "VEINTICICO MIL TRESCIENTOS VEINTICINCO CON 25/100" yo se que esto se hace en excel con una funcion la cual ya tengo y me funciona perfectamente pero no se como incorporarla a un userform con los controles antes mencionados

Esta es la funcion que utilizo en excel

'Funcion para pasar numeros a letras
Function Lempiras(Valor As Currency, Optional MonedaSingular As String = "", Optional MonedaPlural As String = "") As String
Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero
Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option Explicit
Dim ValorEntero As Long
Valor = Round(Valor, 2)
lyCantidad = Int(Valor)
ValorEntero = lyCantidad
lyCentavos = (Valor - lyCantidad) * 100
Launidades = array("un", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve", "diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve", "veinte", "veintiun", "veintidos", "veintitres", "veinticuatro", "veinticinco", "veintiseis", "veintisiete", "veintiocho", "veintinueve")
laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
Lacentenas = array("ciento", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos")
lnNumeroBloques = 1

Do
lnPrimerDigito = 0
lnSegundoDigito = 0
lnTercerDigito = 0
lcBloque = ""
lnBloqueCero = 0
For I = 1 To 3
lnDigito = lyCantidad Mod 10
If lnDigito <> 0 Then
Select Case I
Case 1
lcBloque = " " & laUnidades(lnDigito - 1)
lnPrimerDigito = lnDigito
Case 2
If lnDigito <= 2 Then
lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)
Else
lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque
End If
lnSegundoDigito = lnDigito
Case 3
lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
lnTercerDigito = lnDigito
End Select
Else
lnBloqueCero = lnBloqueCero + 1
End If
lyCantidad = Int(lyCantidad / 10)
If lyCantidad = 0 Then
Exit For
End If
Next I
Select Case lnNumeroBloques
Case 1
Lempiras = lcBloque
Case 2
Lempiras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & Lempiras
Case 3
Lempiras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & Lempiras
End Select
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
Lempiras = Lempiras & " LEMPIRAS CON " & Format(Str(lyCentavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
End Function

Espero me puedan explicar que es lo que debo hacer para que me funcione como lo necesito.

1 respuesta

Respuesta
1

 H o l a:

 Agrega el siguiente evento:

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    TextBox2 = Lempiras(Val(TextBox1))
End Sub

La función Lempiras, la puedes poner dentro del mismo formulario o en un módulo.

Hola Dante

Agregue el código que me enviaste y funciona bien pero solo hasta el rango 999.99, si ingreso un valor superior solo me convierte el primer dígito es decir si escribo 1000 la conversión me queda en "Un Lempira" cual es el error que estoy cometiendo

Gracias

Y cómo estás poniendo el 1000,

1000

o

1,000

Debes poner solamente números sin comas, ejemplo:

1000.16

Si es correcto los valores los ingreso así 1000.25, 1250350.15, 10253.15 en todos los casos solo me reconoció el numero inicial el 1

En la instrucción que te puse quita la palabra Val y prueba.

Si no funciona, cambia Val por Cdbl y prueba.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas