Problemas con fórmula en macro

Tengo un problema con el siguiente código...

Private Sub TextPrecioCompra_Change() 
    If TextPrecioCompra.Value = "" Then Exit Sub
    If TextUndDeposito.Value = "" Then Exit Sub
    If TextPrecioVenta.Value = "" Then Exit Sub
    If TextBeneficio.Value = "" Then Exit Sub
    If TextCompraMenosVenta.Value = "" Then Exit Sub
    TextCompraMenosVenta.Value = CDbl(TextPrecioVenta.Value) - CDbl(TextPrecioCompra.Value)
    TextBeneficio.Value = CDbl(TextCompraMenosVenta.Value) / CDbl(TextPrecioVenta.Value) * 100
    TextBeneficioEuros.Value = (CDbl(TextPrecioVenta.Value) - CDbl(TextPrecioCompra.Value)) * CDbl(TextUndDeposito.Value)
    TextPrecioCompra.Value = CDbl(TextPrecioVenta.Value) - ((CDbl(TextBeneficio.Value) / 100) * CDbl(TextPrecioVenta.Value))
End Sub

El TextBeneficio.Value me marca error y lo unico que se me ocurre despues de muchas vueltas es que esta parte de la formula...

CDbl(TextCompraMenosVenta.Value) / CDbl(TextPrecioVenta. Value)

Antes de multiplicar por 100, son decimales, en la prueba es 0'5 lo que arroja un resultado final de 50.

Respuesta
1

El problema puede ser alguno de los siguientes:

a) La función CDbl( ), convierte un número que está como texto en valor numérico. Pero si el texto no es un número envía error.

b) También puede ser que estés dividiendo entre 0.

c) También puede ser que 0,5 no lo esté considerando como número y entonces tengas que convertir a 0.5, ya que las fórmulas utilizan el separador decimal punto, por el origen del lenguaje que está creado en inglés.

d) También puede ser que entre en loop, ya que en la última fórmula estás actualizando el TextCompraMenosVenta, entonces vuelve a entrar al evento TextPrecioCompra_Change(); y entonces entra en un ciclo sin fin.


Como puedes observar, puede ser alguno de esos problemas, para identificar cuál podría ser; podrías poner el mensaje de error que te aparece.

Pon lo siguiente en tu código:

Private Sub TextPrecioCompra_Change()
    If TextPrecioCompra.Value = "" Then Exit Sub
    If TextUndDeposito.Value = "" Then Exit Sub
    If TextPrecioVenta.Value = "" Then Exit Sub
    If TextBeneficio.Value = "" Then Exit Sub
    If TextCompraMenosVenta.Value = "" Then Exit Sub
    '
    TextCompraMenosVenta.Value = CDbl(TextPrecioVenta.Value) - CDbl(TextPrecioCompra.Value)
    '
    If IsNumeric(TextCompraMenosVenta.Value) Then
        t_com = CDbl(TextCompraMenosVenta.Value)
    Else
        t_com = 0
    End If
    If IsNumeric(TextPrecioVenta.Value) Then
        t_pre = CDbl(TextPrecioVenta.Value)
    Else
        t_pre = 0
    End If
    '
    If t_pre <> 0 Then
        TextBeneficio.Value = CDbl(TextCompraMenosVenta.Value) / CDbl(TextPrecioVenta.Value) * 100
    End If
    TextBeneficioEuros.Value = (CDbl(TextPrecioVenta.Value) - CDbl(TextPrecioCompra.Value)) * CDbl(TextUndDeposito.Value)
    TextPrecioCompra.Value = CDbl(TextPrecioVenta.Value) - ((CDbl(TextBeneficio.Value) / 100) * CDbl(TextPrecioVenta.Value))
End Sub

Ejecuta tu formulario en modo "Depuración", captura tus valores y después modifica el TextPrecioCompra, ejecuta el código paso a paso; y dime qué valores se almacenan en las variables t_com y t_pre.

Continúa con la ejecución y dime si entra en un loop.


E spero tus comentarios.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas