Asignación de ActiveCell.FormulaR1C1 = FORMULA (falla)

Buenas tardes Experto.
Desde un formulario en VBA para insertar clientes (nombre, apellidos, fecha nacimiento).
Al teclear una fecha en dd/mm/aaaa y al pulsar un botón de insertar automáticamente inserta un registro con nombre, apellidos, fecha nacimiento y el campo calculado "edad".
La fórmula calcula la edad de una persona, funciona correctamente.
F7 seria la celda que está al lado del registro, por ejemplo: 23/08/1978
Aquí la parte que da error en ejecución:
ActiveCell.FormulaR1C1 = "=SI(MES(HOY())=MES(F7);SI(DIA(HOY())<DIA(F7);AÑO(HOY())-AÑO(F7)-1;AÑO(HOY())-AÑO(F7));SI(MES(HOY())>MES(F7);AÑO(HOY())-AÑO(F7);AÑO(HOY())-AÑO(F7)-1))"
Nota: después de que esto funcione deberé cambiar F7 por una variable que identifique la celda correspondiente al registro.
Espero pueda ayudarme, un saludo y gracias
Guillermo

1 Respuesta

Respuesta
1
"error 1004".
Falla por que estas utilizando la forma R1C1
Esta forma admite referencias del tipo (R[-2]C)
En donde R[-2] establecería la referencia a 2 filas sobre la celda activa y C la columna
Ingresa tu fórmula así:
ActiveCell.Formula = tu formula
En lo que respecta a pasarle f7 o f16 o D34 como referencia
Utiliza una variable, le pasas la referencia y luego concatenas la cadena
dim celda as string
celda="F7"
o bien
celda=Activecell.address
"=SI(MES(HOY())=MES(" & celda & ")"
Lo olvidaba
Antes de pasa la fórmula debes cambiar los ; solo por,
activecell.formula = "=si(mes(hoy())=mes(f7),si(dia(hoy())<dia(f7),año(hoy())-año(f7)-1,año(hoy())-año(f7)),si(mes(hoy())>mes(f7),año(hoy())-año(f7),año(hoy())-año(f7)-1))"
Te agradezco mucho tu respuesta, me ha ayudado a comprender lo que me pasaba y a solucionarlo.
Un problema de mayúsculas en la fórmula insertada me da un: #¿NOMBRE?
Es curioso inserta la fórmula toda en mayúsculas menos DÍA:
=SI(MES(HOY())=MES(F8);SI(dia(HOY())<dia(F8);AÑO(HOY())-AÑO(F8)-1;AÑO(HOY())-AÑO(F8));SI(MES(HOY())>MES(F8);AÑO(HOY())-AÑO(F8);AÑO(HOY())-AÑO(F8)-1))
Pongo el código (un poco liado pero era para intentar buscar, una solucion):
Dim salida As String
Dim sOriginal As String
Dim sBuscar As String
Dim sSustituir As String
'quito los $ de la formula
sOriginal = ActiveCell.Previous.Address sBuscar = "$" sSustituir = "" celda = Replace(sOriginal, sBuscar, sSustituir, , , vbTextCompare)
salida = "=SI(MES(HOY())=MES(" & celda & "),SI(DIA(HOY())<DIA(" & celda & "),AÑO(HOY())-AÑO(" & celda & ")-1,AÑO(HOY())-AÑO(" & celda & ")),SI(MES(HOY())>MES(" & celda & "),AÑO(HOY())-AÑO(" & celda & "),AÑO(HOY())-AÑO(" & celda & ")-1))"
ActiveCell.formula = UCase(salida) 'mayusculas toda la formula
Ni con esas, soy capaz de que DÍA quede en mayúsculas para que no de el #¿NOMBRE?
Me doy por satisfecho por la respuesta recibida, no obstante si no es abusar y sabe por qué, pues quedaré doblemente agradecido.
Muchas gracias
Guillermo
La verdad en ocasiones pasa eso, pero si te posicionas sobre la celda en la que has insertado la función y le das f2 y luego enter. Se "normaliza"
Cosas de excel!.
Para salvar ese problema en ocasiones aplico trim() a la celda o bien la celda + 0

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas