Soy bastante novato en la elaboración de macros para Excel 97 y me encuentro
con el siguiente problema. Tengo una hoja de prueba con los siguientes
contenidos:
Celda Valor Formato
------- ------ ----------
A1 15 General
A2 20 General
A3 25 General
A4 30 General
A5 35 General
A6 General
Y la macro
Sub kk()
Range("A6").Formula = "=SUMA(A1:A5)"
End Sub
Cuando la ejecuto, en A6 me sale "#¿NOMBRE?" y si me coloco sobre la celda
aparentemente está bien porque sale "=SUMA(A1:A5)" (sin las comillas). Sin
embargo no funciona como fórmula (no sale el resultado sino "#¿NOMBRE?").
Si, a partir de esta situación, entro en la celda (es decir, la marco con el
ratón y pulso con él en la zona de edición y me salgo de edición pulsando en
otra celda o dando Intro) la cosa se arregla, pero me gustaría saber por qué
la macro no crea completamente bien la fórmula. Recuerdo que algo parecido
me pasó otra vez con una hoja importada, en la que no reconocía como números
las celdas de una columna (no podía sumarlas, las ajustaba a la izquierda,
etc.) ni aunque forzara el formato de la columna a "Numero" o a "General".
Si iba de celda en celda entrando y saliendo se arreglaba pero la columna
era larga y no parecía una solución muy razonable. Al final lo arreglé con
la función VALOR pero nunca he sabido la causa ni la solución mejor.
Si alguien puede echarme una mano le quedaré muy agradecido.
Gracias en todo caso por leerme.
GGG
O sea poniendo la formula en ingles (sum en vez de suma). Un saludo
"GGG" <gggi...@telelineQUITA.es> escribió en el mensaje
news:u53adg1DBHA.2012@tkmsftngp05...
Me queda la duda de la importación de datos numéricos pero con el truco de
usar la función VALOR si se me vuelve a dar podré seguir adelante.
Muchas gracias, Pep.
GGG
"Pep" <avem...@hotmail.com> escribió en el mensaje
news:eNK$Fx1DBHA.2012@tkmsftngp05...
Hay 2 propiedades involucradas: Formula y FormulaLocal. La primera es la
fórmula de la celda en inglés, mientras que la 2ª es la misma fórmula en el
lenguaje del usuario. Analizando el comportamiento de ambas, he llegado a la
conclusión de que cuando introducimos una fórmula de modo normal, o sea sin
usar VBA, Excel asigna la entrada a la propiedad FormulaLocal y "traduce"
automáticamente la fórmula al inglés, asignando dicha traducción a la
propidad Formula. Si tratamos de introducir la función en ingles aparecerá
el mensaje #NOMBRE?
Sin embargo, si ponemos la fórmula usando VBA es posible establecer tanto la
propiedad Formula como la propiedad FormulaLocal, pero si no ponemos la
fórmula en el idioma de la propiedad obtendremos el error que te aparecía a
ti. Por ejemplo, en tu caso el error se producía porque tratabas de asignar
la función SUMA (castellano) a la propiedad Formula (inglés). También te
habría salido el error en el caso contrario, es decir, si hubieras tratado
de hacer Range("A6").FormulaLocal = "=SUM(A1:A5)"
El error se solucionaba al editar la celda porque al terminar dicha edición
Excel se comporta como ya he descrito antes: asigna la entrada a
FormulaLocal y la traduce y asigna a Formula.
Todo esto podría parecer algo sin demasiada utilidad, pero yo le he
encontrado una para un problema que no sabía como solucionar. Resulta que,
como muchos sabréis, para utilizar las funciones de hoja de cálculo en VBA
hay que aplicar la función que se necesite al objeto WorksheetFunction, pero
es necesario hacerlo en inglés. Por ejemplo, para sumar el rango B1:B10
habría que usar:
Application.WorksheetFunction.Sum(Worksheets("Hoja1").Range("B1:B10"))
Con la función SUM y con algunas otras no hay problemas de traducción, pero
¿qué pasa con funciones como, por poner un ejemplo complicado,
COEFICIENTE.ASIMETRIA. Resulta que dicha función en inglés es SKEW, y (quien
lo hubiera dicho) es esto lo que habría que utilizar en VBA, así que cuando
tenemos que usar una función de hoja de cálculo en VBA y no sabemos su
traducción podemos averiguarla escribiendo en una celda de una hoja la
fórmula en castellano y luego obteniendo la propiedad FormulaLocal de dicha
celda usando VBA. Esto es lo que he hecho yo para averiguar la traducción de
COEFICIENTE.ASIMETRIA
Me temo que todo este mensaje será un verdadero ladrillo para los que no
esteis interesados en VBA, pero me ha parecido que podía merecer la pena
para los que sí estamos interesados. Un saludo.
Fernando
"GGG" <gggi...@telelineQUITA.es> escribió en el mensaje
news:eP#iGR4DBHA.1380@tkmsftngp05...
> Lo que te ha dicho PEP es correcto y está claro que funciona, pero quería
> entrar un poco más en el asunto porque tal vez tenga más "chicha" de la
que
> parece.
>
> Hay 2 propiedades involucradas: Formula y FormulaLocal. La primera es la
> fórmula de la celda en inglés, mientras que la 2ª es la misma fórmula en
el
> lenguaje del usuario. Analizando el comportamiento de ambas, he llegado a
la
Si Pep me resolvió el problema tú me lo has aclarado totalmente (de paso que
me revelas uno de los muchos caminos de mi desconocimiento). Fíjate que
creía que había probado con "FormulaLocal" (sin saber que significaba, un
palo de ciego más) pero debí hacerlo mal porque he repetido la prueba y ha
resultado tal como dices.
> Me temo que todo este mensaje será un verdadero ladrillo para los que no
> esteis interesados en VBA, pero me ha parecido que podía merecer la pena
> para los que sí estamos interesados. Un saludo.
Tu aportación, en lo que a mí respecta, ha sido fabulosa. O sea que nada de
ladrillo. El meterse en estas cosas sin documentación es divertido pero
arriesgado. La ayuda que se puede obtener en foros como éste es lo que
permite que los novatos atrevidos sigamos existiendo.
> lo hubiera dicho) es esto lo que habría que utilizar en VBA, así que
cuando
> tenemos que usar una función de hoja de cálculo en VBA y no sabemos su
> traducción podemos averiguarla escribiendo en una celda de una hoja la
> fórmula en castellano y luego obteniendo la propiedad FormulaLocal de
dicha
> celda usando VBA. Esto es lo que he hecho yo para averiguar la traducción
de
> COEFICIENTE.ASIMETRIA
>
Había observado que Excel traducía al inglés algunas fórmulas por el método
de crear una macro grabada y ver luego el código de VB pero el método que
sugieres me parece más elegante.
Muchísimas gracias,
GGG
anda que no habré dado patadas al aire tratando de traducir algunas funciones, espero no olvidarme de la "FormulaLocal" la proxima vez
Saludos
Emilio