Application.Evaluate error

sailepaty

Active Member
Joined
Nov 1, 2005
Messages
279
Actualmente tengo codigo para sumar, contar por colores inclusive si estos provienen de formato condicional.

El codigo trabaja perfectamente en Excel version en ingles, el problema lo tengo cuando intento ejecutarlo en Excel version en español.

En la celda A2 tengo el formato condicional =Promedio(b1,b2)>7

La siguiente linea es la que me presenta problemas.

Code:
bValue = Application.Evaluate(Range("A2").FormatConditions(1).Formula1)

Sin embargo si la formula se encuentra en una celda el siguiente codigo trabaja bien.

Code:
bValue = Application.Evaluate(Range("A2").Formula)

Lo que he descubierto hasta ahora es que Excel tiene problemas para evaluar las formulas cuando provienen del formato condicional.

Se que podria escribir la formula en una celda y despues evaluarla, pero sucede que quiero aplicar la funcion a varias celdas y hacerlo de esa forma seria muy complicado.

Agradezco de antemano cualquier sugerencia.

Saludos
 

Excel Facts

Back into an answer in Excel
Use Data, What-If Analysis, Goal Seek to find the correct input cell value to reach a desired result
¡Bienvenido a MrExcel!

¿Qué pasa si usted hace que las referencias en la fórmula condicional sean absolutas?

ej. =Promedio($b$1,$b$2)>7
 
Upvote 0
Si... esa es una gran limitación del objeto FormatConditions. No está diseñado para trabajar en versiones fuera del inglés.

La propiedad 'Formula1' devuelve la fórmula en español:

=PROMEDIO($B$1:$B$2)>1

pero la propiedad 'Formula' de la celda la devuelve en Inglés:

=AVERAGE($B$1:$B$2)>1

Se supone que uno puede crear un nombre y usar la función EVALUAR o EVALUATE en inglés, para ver qué valor tiene esta fórmula, pero hasta ahora no he podido hacer que funcione.
 
Upvote 0
El problema es que Application.Evaluate necesesita que la formula este en ingles.

Asi que si efectuo la siguiente linea de codigo:

Code:
cFormula = Range("A2").FormatConditions(1).Formula1

cFormula es igual a =Promedio($b$1,$b$2)>7 y Application.Evaluate esta esperando que sea =Average($b$1,$b$2)>7.

Gracias por la respuesta.
 
Upvote 0
Que tal Greg,

Estaba respondiendo tu comentario porque no habia visto el de Juan Pablo.

Sin embargo con el comentario de Juan me doy cuenta que no estoy tan mal.

Pero me interesaria si Juan Pablo puede compartir el articulo donde se dice que se puede crear un nombre y despues utilizar la funcion Evaluar o Evaluate.

Realmente no importa si se encuentra en Ingles.

Muchas gracias a los dos.
 
Upvote 0
En realidad no he leido algun articulo al respecto... creo que fue alguno de los MVPs que me mencionó esa opción, pero ahora estoy pensando que eso funciona cuando la fórmula es en inglés, porque estuve probando con esto:

Cree "manualmente" un nombre así

Test1

=EVALUAR("PROMEDIO(A1, A2)")

que funciona bien cuando lo utilizo en una celda de Exel. En VBA veo esto:

?Names("Test1").RefersTo
=EVALUATE("PROMEDIO(A1,A2)")
?Names("Test1").RefersToLocal
=EVALUAR("PROMEDIO(A1,A2)")

obviamente lo que está entre comillas no se traduce, lo cual está bien también, pero entonces al tratar de hacer esto:

?Evaluate("Test1")

me bota Error 2015, es decir, xlErrValue. También puedo crear el nombre sin problemas:

Names.Add "Test2", "=EVALUATE(""PROMEDIO(A1, A2)"")"

o

Names.Add "Test3", ,,,,,, "=EVALUAR(""PROMEDIO(A1, A2)"")"

y los puedo usar en Excel directamente sin problemas, pero no veo como evaluar esta formula desde VBA, sin tener que usar alguna celda intermedia... creo que la solución sería que existiera un Application.EvaluateLocal() para poder mandar la fórmula en el idioma en que está Excel, o, mejorar el objeto FormatConditions para que diga cual(es) condición está activa.
 
Upvote 0
Muchas gracias Juan Pablo.

La verdad es que yo tambien he estado intentando evitar utilizar un celda intermedia.

Mientras encontramos la solución me podrias sugerir de que forma definir la celda a utilizar si estamos llamando a la funcion desde distintas celdas.

Me explico tengo en diferentes celdas de la hoja la funcion ObtenerColor(Celda) y no me imagino que celda utilizar para escribir la formula obtenida del formato condicional y despues con simple Evaluate(Cell(x,x).Formula) obtener lo que deseo.

Gracias
 
Upvote 0
La solución no existe.. desafortunadamente. No desde una función de VBA. Esto es porque una función no puede cambiar el valor de otra celda.

La única solución que se me ocurre es poner las mismas fórmulas en celdas, y mirar el resultado de esas celdas desde la función.
 
Upvote 0

Forum statistics

Threads
1,223,954
Messages
6,175,600
Members
452,658
Latest member
GStorm

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top