Poner en un textbox2 una cantidad con letra desde otro

Quiero reflejar en un Textbox2 una cantidad con letra pero la información la tome de un textbox1 donde se capturala cantidad con numero, esto lo esto desarrollando con formularios para macros de excel vb, los dos textbox están en un formulario.

1 Respuesta

Respuesta
1
No queda muy claro cual es tu problema, si desarrollar el traductor de numero a letras, o si como leer y escribir los textbox del formulario.
Si tu problema es con el desarrollo del traductor, en principio se me ocurre que deberías armar un diccionario donde tener en cuenta como se nombra a cada numero según su posición en la cifra, y luego programar las condiciones para ir logrando la traducción.
Explica mejor tu problema, y con gusto te ayudare a resolverlo.
Mi problema es desarrollar el traductor, ya que estoy realizando un formulario de un cheque, y que al capturar la cantidad en el textbox1, en el textbox2 que se refleje automáticamente la cantidad con letra de la cantidad capturada en el tetxbox1,
tengo la siguiente función, pero esta solo puedo utilizarla en excel y me lo convierte a letras las cantidades, pero quiero que este en un textbox2 y el se refleje ahí y ese es mi problema, espero haberme explicado bien.
Function PesosMN(tyCantidad As Currency) 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
tyCantidad = Round(tyCantidad, 2)
lyCantidad = Int(tyCantidad)
lyCentavos = (tyCantidad - 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
PesosMN = lcBloque
Case 2
PesosMN = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & PesosMN
Case 3
PesosMN = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & PesosMN
End Select
lnNumeroBloques = lnNumeroBloques + 1
Loop Until lyCantidad = 0
PesosMN = "(" & PesosMN & IIf(tyCantidad > 1, " PESOS ", " PESO ") & Format(Str(lyCentavos), "00") & "/100 M.N.)"
End Function
A ver si entiendo, por un lado me dices que tu problema es al desarrollar el traductor, pero (aunque no lo eh testeado) veo que tienes una función bastante afinada que hace la traducción, si el problema es o esta en esta función, no me que da claro donde radica dicho problema.
Por otro lado  me dices que el problema esta en que quieres que automaticamente al poner una cantidad en textbox1, se vea el importe en letras en textbox2. para lograr esto deberias programar en el evento change de textbox1 o en el evento lostfocus, segun como quieras  hacerlo, que se haga una llamada a la funcion traductora, y que el resultado lo escriba en textbox 2
ejemplificandolo seria algo asi
sub textbox1_change (......)
{
      textbox2.text = PesosMN(textbox1.text)
}
supongo que esto ya lo habras probado, y en principio me atreveria a decir que eso proboca un error, y que estimo que es lo que realmente te trajo a realizar esta consulta. Pues bien.. segun mi parecer esto probocara un error de que los tipos de datos no coinciden, y es por que la funcion espera un dato tipo Currency, y el text de textbox1 es un dato de tipo variant, por lo cual te recomiendo entonces que lo hagas de la siguiente forma
sub textbox1_change (......)
{
      textbox2.text = PesosMN(ccur(textbox1.text))
}

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas