martes, 15 de mayo de 2018

VBA: una función para gobernarlas a todas

En el pasado post hablamos de algunos de los métodos del objeto Application...
En el día de hoy aplicaremos uno de ellos .Evaluate, que nos permitirá trabajar con cualquier función de tipo lineal (una variable).
Crearemos de una manera muy sencilla una función para gobernarlas a todas. (Si Mr. Tolkien me permite la licencia...)


En la ventana de código de un módulo estándar incluimos el siguiente procedimiento:

Function FuncionesLineales(fx As String, valor_x As Double) As Double
'aplicamos dos reemplazamientos
'1- para cambiar la variable por el valor concreto asignado
'2- tenemos en cuenta el cambio de configuración de los separadores decimales
'(recuerda que en el entorno del editor de VB el separador decimal es el punto, y no la coma!!)
func = Replace(Replace(fx, "x1", valor_x), ",", ".")

'retornamos el valor a la función creada
FuncionesLineales = Application.Evaluate(func)

End Function



Veamos el uso de nuestra UDF recién creada:

VBA: una función para gobernarlas a todas



Comprobamos cómo a partir de una función expresada como cadena de texto en una celda, somos capaces de convertirla en una función 100% operativa.
Como se observa en la imagen la misma función creada 'FuncionesLineales' aplicada sobre diferentes celdas/funciones, devuelve los datos correspondientes...
Relevante es llamar a nuestra variable como 'x1' (equis uno) para que el reemplazamiento funcione correctamente...

OJO: la función debe emplear los términos, operadores o nombres de funciones en algo entendible en el entorno de programación.

No hay comentarios:

Publicar un comentario