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.
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)) }