Función personalizada

Tengo una función personal en excel que me calcula un descuento conforme al valor de una celda la D2. En ella hay unos valores 2%, 4%, 6%, o Margen.En caso de que el valor sea margen calcula el descuento conforme al margen del articulo, celda L4, y una tabla de descuentos, rango w5:y8. El problema es que cuando utilizo otras macros continuamente me esta ejecutando esta función, sin que varia ninguno de los datos de sus argumentos.Ej realizo una búsqueda o un filtrado y me ejecuta la función. ¿Cómo puedo evitar esto?.
Se podría ejecutar este mismo objetivo mediante fórmulas de excel.
Este es el código de la función:
Function PrecioNeto(margen As Single, PrecioOfer As Single, precio As Single, valoriva As Single) As Single
Application.Volatile False
Dim Descuento As Single
If Sheets("Articulos").Range("D2").Value = "MARGEN" Then
If margen <= Sheets("ARTICULOS").Range("w5").Value Then
Descuento = 0
ElseIf margen > Sheets("ARTICULOS").Range("w5").Value And margen <= Sheets("ARTICULOS").Range("X5").Value Then
Descuento = Sheets("ARTICULOS").Range("Y5").Value / 100
ElseIf margen > Sheets("ARTICULOS").Range("w6").Value And margen <= Sheets("ARTICULOS").Range("X6").Value Then
Descuento = Sheets("ARTICULOS").Range("Y6").Value / 100
ElseIf margen > Sheets("ARTICULOS").Range("w7").Value And margen <= Sheets("ARTICULOS").Range("X7").Value Then
Descuento = Sheets("ARTICULOS").Range("Y7").Value / 100
ElseIf margen > Sheets("ARTICULOS").Range("w8").Value And margen <= Sheets("ARTICULOS").Range("X8").Value Then
Descuento = Sheets("ARTICULOS").Range("Y8").Value / 100
ElseIf margen > Sheets("ARTICULOS").Range("w9").Value Then
Descuento = Sheets("ARTICULOS").Range("Y9").Value / 100
End If
Else: Descuento = Sheets("Articulos").Range("D2").Value / 100
End If
If PrecioOfer <> 0 Then
precio = PrecioOfer
Else: precio = precio
End If
valoriva = 1 + valoriva / 100
PrecioNeto = (precio - (precio * Descuento)) / valoriva
End Function
1

1 respuesta

Respuesta
1
Cree una nueva variable de ingreso en su función ej: automático, que puede tener dos valores: SI o NO.
En la programación de su función, coloque un if que en caso de ser SI, hablite el calculo automático de las fórmulas :
With Application
.Calculation = xlAutomatic
.MaxChange = 0.001
end with
en el else:
With Application
.Calculation = xlManual
.MaxChange = 0.001
End With
De manera tal que todas las fórmulas las referencia por ejemplo con la celda A1 o cualquiera que este disponible de forma absoluta y listo.
A1 solo debe tomar valores de SI o NO
Así cuando quiera que recalcule, pone SI, si no lo quiere, pone NO

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas