Saltar al contenido

Seleccionar Rango y Copiar formula con VBA y R1C1


merlow

Recommended Posts

Estimados..

Buenas Tardes..

En esta oportunidad les pido ayuda para tratar de hacer lo siguiente:

En el modulo de VBA, hay formulas que evaluan valores y se copian en las celdas correspondientes; para lo cual utilizo el objeto FormulaLocal y este es justamente el problema... este archivo que va a ser abierto desde diferentes terminales, con diferentes versiones de Excel.. (ingles, español y frances). Por lo que este archivo solo funciona en la PC en la cual lo estoy armando y no en todas las versiones.

Estuve leyendo por ahi, y dicen que la notacion R1C1 es la ideal para este tipo de cosas, ya que es indistinto en que Pc se abra el archivo y el idioma que tenga la misma.

Hay algo que estoy haciendo mal al tratar de pasar las formulas que tengo a R1C1, ya que llegado el momento de copiar la formula en el rango seleccionado, me pega el texto de la formula y no la formula en si misma...

A ver si alguno de Uds, me puede dar una manito y me dice que es lo que estoy haciendo mal..

Tambien Acepto sugerencias para pulir el codigo.. Muchas Gracias

Base FORO.zip

Enlace a comentario
Compartir con otras webs

Buenas, merlow

Me da que la "F" de tus fórmulas la tienes que cambiar por "R".........y debes tener en cuenta que lo que utilizas es una referencia relativa a la celda desde la que estás creando la fórmula....

Por ejemplo.........si estás en la celda "C4" y escribes ........"R-1C1"......le estás diciendo que haga algo con la casilla que está una fila hacia arriba (R-1) y con una columna a la derecha (C1)........por tanto, el valor que buscabas sería "D3"..........

Si necesitas indicarle que es la misma fila o la misma columna no incluyas número tras "R" ó "C".......así....."R-5C" (misma columna)......ó "RC3" (misma fila)....

No sé si te ha servido ó ha sido peor aún al liarte más.....jejeejeje

Un saludo,

Tese

Enlace a comentario
Compartir con otras webs

Al usar "FormulaLocal", fuerzas a que la función introducida en la formula, sea en el idioma del Office en el cual se corre la instrucción, por lo que si esto:


Range("AE2:AE" & Qreg).FormulaLocal = "=SI(R2=""NO"";SI(AD2>0;0;AD2);(AB2-S2)/CONTAR.SI($B$2:$B$4905;$B2))"
[/CODE]

Lo corres en un Office en Ingles, Alemán u otro que no sea el Castellano/Español pues como bien comentas, dará error. Cuando usas 'FormulaR1C1' (que también tiene su opción 'local': 'FormulaR1C1Local') como bien estas haciendo hay que usar las funciones en Ingles, que es el idioma del VBA, claro que el gran problema es usar bien las referencias que como bien te dice Tese, resulta a veces algo complicado, ademas de tener en cuenta su observación sobre el uso de la 'F' que estabas aplicando.

¿Y como podemos para que en cualquier Office inserte la función con el idioma adecuado ademas de no loquearnos con las referencias 'RC'? Pues hay que usar el idioma del VBA (que ya dije que es el Ingles) y usar la propiedad "Formula":

[CODE]
Range("AE2:AE" & Qreg).Formula = "=IF(R2=""NO"";SI(AD2>0;0;AD2);(AB2-S2)/COUNT.IF($B$2:$B$4905;$B2))"
[/CODE]

De ese modo, sea cual sea el idioma del Office, esa linea de código, al insertarlo en la celda correspondiente cambiara la función al idioma correspondiente.

Abraham

Enlace a comentario
Compartir con otras webs

Tese y Avalencia: Muchas Gracias por la explicacion. Me ha quedado mucho más claro el tema de R1C1. Tenía un error de concepto mio en cuanto a las referencias.

Avalencia: Probé con tu código cambiando todo al ingles y me arroja el error de tipo "#Nombre" al insertar las formulas.

Tambien probé una por una en cada celda y me sigue arrojando el mismo error.

Alguna sugerencia de donde podria estar la cuestion?

Muchas Gracias.

Enlace a comentario
Compartir con otras webs

Hola:

Normalmente cuando solo envió un par de lineas de código, nunca lo pruebo y solo lo escribo 'de memoria' o haciendo un copiar/pegar de lo que alguien envió. En este caso, hice lo mismo y deje los "puntos y comas", pero solo para que quede claro procedo a comentar algo de teoría:

- EL VBA esta en Ingles, por lo tanto se comporta acorde a dicho idioma, lo que en la practica significa que:

1- Cuando usamos propiedades como 'Formula', las funciones introducidas deben estar en Ingles y el Excel lo cambiara al idioma correspondiente en la hoja de Excel

2- En esos mismos casos, el separador de lista siempre sera la 'coma', y del mismo modo el Excel lo cambiara a 'punto y coma' si así lo usamos nosotros en la hoja de Excel

3- El separador de decimales en VBA siempre es el 'punto', y del mismo modo Excel lo cambiara si lo usamos en una hoja de Excel

Creo que así ahora todo quedara más claro. Sobre tu error actual, ¿ podrías enviar tu archivo con las modificaciones?

Abraham

Enlace a comentario
Compartir con otras webs

Amigos:

Buenas Tardes.

Mi error estaba en justamente lo que menciona avalencia: El separador de decimales. Estaba poniendo la "coma" en vez del "punto".

Doy por finalizada la consulta, no sin antes agradecer a Avalencia y Tese, por la ayuda prestada y el tiempo empleado en ayudarme y evacuar mis dudas.

Nuevamente, muchas Gracias.

Tema Cerrado.!

Enlace a comentario
Compartir con otras webs

  • 2 weeks later...

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.