martes, 8 de marzo de 2016

VBA: Un ejemplo del método Worksheets.EVALUATE.

En otro foro que atiendo se planteaba la siguiente cuestión:
Si A1 tiene el texto "2^3+1" o "16/2-(1/3)^-1" quiero que B1 efectúe las operaciones y dar como resultado 9 o 5

La respuesta más simple y directa es emplear el método Worksheets.EVALUATE, el cual convierte un nombre de Microsoft Excel en un objeto o un valor.
Qué debemos saber de este método:
-Podemos usar cualquier referencia a una sola celda en la notación de estilo A1. Todas las referencias se consideran absolutas.
-Con las referencias podremos usar los operadores de rango, intersección y unión (dos puntos, espacio y punto y coma, respectivamente).
-Es posible especificar cualquier nombre en el lenguaje de la macro.
-También podemos usar el operador ! para hacer referencia a una celda o un nombre definido en otro libro. Por ejemplo, Evaluate("[Libro1.xlsx]Hoja1!A1").


Para resolver nuestra cuestión en particular, insertamos el siguiente código dentro de la ventana de código de un módulo estándar desde el editor de VB:

Function CalculaTexto(celda As Range) As Variant
CalculaTexto = ActiveSheet.Evaluate(celda.Value)
End Function



Finalmente bastará escribir la función UDF 'CalculaTexto' en cualquier celda de la hoja, indicando la celda de referencia.
El resultado:

VBA: Un ejemplo del método Worksheets.EVALUATE.

2 comentarios:

Nota: solo los miembros de este blog pueden publicar comentarios.