Limpiar formato para calcular y volver a aplciar formato

Dudas sobre código
Avatar de Usuario
leadrudi
Nivel 5
Mensajes: 178
Registrado: Sab Oct 14, 2017 7:55 am

Limpiar formato para calcular y volver a aplciar formato

Mensajepor leadrudi » Mié May 20, 2020 9:51 pm

Tengo unos campos a los que le aplico un formato que los convierte en texto. Para ciertos cálculos necesito que se quite ese formato y volverlo a aplicar tras obtener el resulado.
Dar formato

Código: Seleccionar todo

Dim vMonedaLcl As String, vMonedaExt As String
Call modVarios.CargaUsuarioYNivel 'Obtengo Usuario activo
vMonedaLcl = Nz(DLookup("[U_TEMA_MONEDA]", "[tabOpciones]", "[USUARIO] = '" & vUsuario & "'"), "es") 'Obtengo configuración de Moneda (Dominio)
vMonedaLcl = Nz(DLookup("[MONEDA]", "[tabDominios]", "[DOMINIO] = '" & vMonedaLcl & "'"), "$")
vMonedaLcl = fncReemplazaFormato(vMonedaLcl) & " "
vMonedaExt = fncReemplazaFormato("$us") & " "

Me.txtCotizacion.Value = Format(Me.txtCotizacion.Value, vMonedaLcl & "#,##0.00")
Me.txtCosto.Value = Format(Me.txtCosto.Value, vMonedaLcl & "#,##0.00")
Me.txtXCostoDolar.Value = Format(Me.txtXCostoDolar.Value, vMonedaExt & "#,##0.00")

Seguro habrá una forma más fácil pero lo he separado así para tener mejor control sobre donde se presenta un error.
Momento del cálculo

Código: Seleccionar todo

Me.txtCotizacion.Value = CLng(Format(Me.txtCotizacion.Value, ""))
Me.txtCosto.Value = CLng(Format(Me.txtCosto.Value, ""))
Me.txtXCostoDolar.Value = Me.txtCosto.Value / Me.txtCotizacion.Value
Call FormatoMoneda

Ahora, al momento de hacer el abandono del campo (está en LostFocus) me genera error 13 porque no se quita el formato o no se limpia de este. No se me ocurre cómo hacerlo porque al formato lo necesito mostrar siempre, solamente quitarlo al momento del cálculo.
NOTA: El formato de la moneda puede tener entre 1 y 3 caracteres: $, $ar, €, etc.
:?: :!: :idea: :arrow: :oops: :( :o :) :D :geek: :ugeek:

pitxiku
VIP
Reto02
Mensajes: 440
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Limpiar formato para calcular y volver a aplciar formato

Mensajepor pitxiku » Mié May 20, 2020 10:44 pm

Si he entendido lo que necesitas, no formatees el número. Usa la propiedad Format de los cuadros de texto para que sea Access el que formatee el número, y así tendrás un número válido en la propiedad Value:

- https://docs.microsoft.com/es-es/office ... box.format

Avatar de Usuario
leadrudi
Nivel 5
Mensajes: 178
Registrado: Sab Oct 14, 2017 7:55 am

Re: Limpiar formato para calcular y volver a aplciar formato

Mensajepor leadrudi » Mié May 20, 2020 11:32 pm

Claro, pero eso me limita a solo un formato. Como dije, se personaliza el formato según el país que se haya seleccionado con el formato de moneda de ese país, por lo tanto pueden ser cerca de 60 formato diferentes. Pueden ser tanto dólares, como pesos, como euros, liras, rublos (¿existen todavía?), etc.
Por eso mismo necesito formatearlos.
AÑADIDO: Noto que no quedó el texto de la primera redacción donde mencionaba que el formato de la moneda puede cambiar según algunas configuraciones. Así que olvida este comentario fuera de sentido.
Última edición por leadrudi el Mié May 20, 2020 11:56 pm, editado 1 vez en total.
:?: :!: :idea: :arrow: :oops: :( :o :) :D :geek: :ugeek:

Avatar de Usuario
leadrudi
Nivel 5
Mensajes: 178
Registrado: Sab Oct 14, 2017 7:55 am

Re: Limpiar formato para calcular y volver a aplicar formato

Mensajepor leadrudi » Mié May 20, 2020 11:53 pm

Creo que un capítulo de una serie fue suficiente para poder dar en la tecla. YO mismo estaba dando la respuesta a mi propia pregunta.
Verán: El formato que escojo añade un espacio DESPUÉS de la parte de texto.

Código: Seleccionar todo

$ar 32,50
€ 3,60
$us 12,20

Bastó con extraer todo lo que viene después del espacio y usarlo como número... Et voilà!
igual ayudó releer mi planteo para ver si había sido claro y entonces leí mi propio comentario:
NOTA: El formato de la moneda puede tener entre 1 y 3 caracteres: $, $ar, €, etc.
No sé si reir o llorar... Pero al menos publicar esta preguntonta me ayudó a darme luz en mi camino.
Quedó así:

Código: Seleccionar todo

Dim vVal1 As Variant, vVal2 As Variant
vVal1 = Mid(Me.txtCosto.Value, InStr(1, txtCosto.Value, " ", vbTextCompare) + 1, Len(Me.txtCosto.Value))
vVal2 = Mid(Me.txtCotizacion.Value, InStr(1, txtCotizacion.Value, " ", vbTextCompare) + 1, Len(Me.txtCotizacion.Value))
MsgBox vVal1 & "/" & vVal2
Me.txtXCostoDolar.Value = vVal1 / vVal2

Seguramente encontrarán demasiado gregre para decir Gregorio... pero lo logré yo. Y eso llena mucho. ¡Abrazos a todos y gracias!
:?: :!: :idea: :arrow: :oops: :( :o :) :D :geek: :ugeek:

pitxiku
VIP
Reto02
Mensajes: 440
Registrado: Sab Sep 30, 2017 6:23 pm

Re: Limpiar formato para calcular y volver a aplciar formato

Mensajepor pitxiku » Jue May 21, 2020 6:53 am

Si te funciona, perfecto. Si no, en vez de hacer esto:

Código: Seleccionar todo

Me.txtCotizacion.Value = Format(Me.txtCotizacion.Value, vMonedaLcl & "#,##0.00")


Haz esto:

Código: Seleccionar todo

Me.txtCotizacion.Format = vMonedaLcl & "#,##0.00"

Avatar de Usuario
leadrudi
Nivel 5
Mensajes: 178
Registrado: Sab Oct 14, 2017 7:55 am

Re: Limpiar formato para calcular y volver a aplciar formato

Mensajepor leadrudi » Dom May 24, 2020 12:53 pm

¡Esa sí no la esperaba!
Y entiendo que en el caso .value = format(XXX) le da formato al valor y en el caso .format = xxx le da formato al objeto lo cual voy a empezar a implementar de inmediato.
¡Muchísimas gracias!
:?: :!: :idea: :arrow: :oops: :( :o :) :D :geek: :ugeek:


Volver a “Código VBA”

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados