# Error con macro al poner fórmula en celda :(



## josevaldesv (Dec 17, 2004)

Cheers mates..
Estoy un poco perdido..
intento hacer lo siguiente, y no me sale...
Esta es toda mi macro... en fórmulas más chicas sí me ha salido...
La fórmula, una vez puesta, corre correctamente
lo que no corre es la macro

any suggestions?

Saludos...
jose valdes

Sub Place_formula_in_cell()
'I want this macro to place the formula
'=IF(IF(IF(K4>=$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p")<=$L$1,IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p"),"-")<>"-","start in "&IF(IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p")<=$L$1,IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p"),"0"),"")
'in cell R4
'but it says it can't
    Range("R4").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(IF(RC[-7]>=R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12,DAYS360(R1C12,RC[-7]),""nw""),""p"")<=R1C12,IF(RC[-7]>R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12,DAYS360(R1C12,RC[-7]),""nw""),""p""),""-"")<>""-"" ""start in "" RC[-7]>R1C12 (DAYS360(R1C12,RC[-7])) "
    Range("R5").Select
End Sub


----------



## Luiz (Dec 17, 2004)

Lo que deves hacer:

Ponga solamente esto (por ejemplo):

Range("R4").FormulaLocal = SE(E(A2=2;A3=3);"ROJO";"VERDE")

Esso hará com que la celda R4  contenga ROJO si los contenidos de las celdas A2 e A3 sean 2 e 3.
Caso tu version de Excel sea en INGLES cambie por

Range("R4").Formula = IF(AND(A2=2;A3=3);"ROJO";"VERDE")


----------



## RalphA (Dec 17, 2004)

Yo soy un muy mal versado en VBA, pero trate muy duro de usar lo propuesto por Luiz, obteniendo solamente errores.  Despues de tantear varias cosas, este codigo me funciono.  (Perdonen que solamente tengo Excel en Ingles): 


```
Sub Test()
  Range("B1").Select
  ActiveCell.Value = "Rojo"
  Range("B2").Select
  ActiveCell.Value = "Verde"
  Range("A4").Select
  ActiveCell.FormulaLocal = "=IF(AND(R2C1=2, R3C1=3),R1C2,R2C2)"
End Sub
```
En el codigo, la linea ActiveCell.FormulaLocal es mas larga, pues contiene el R1C1,R2C2)" que aparece como la penultima linea!

En cuanto a lo planateado por Jose, no entiendo las formulas.  Quiza, si publicara de nuevo, con una formula mas sencilla, habria mas personas que tratarian de ayudarle?


----------



## RalphA (Dec 18, 2004)

Bueno. segui tratando, y, al obseravar lo propuesto por Jose, trate:


```
Sub Test()
  Range("A4").FormulaLocal = "=if(and(r2c1=2,r3c1=3),""Rojo"",""Verde"")"
End Sub
```
y, funciono perfectamente!
===========================================
Tambien trate:


> Sub Test2()
> Range("A4").Select
> ActiveCell.FormulaR1C1 = "=if(and(r2c1=2,r3c1=3),""Rojo"",""Verde"")"
> End Sub


Y este codigo tambien trabajo igual que el anterior.

Creo que ahora lo que falta es que el amigo Jose nos de una formula mas simple que la original, porque la falla que yo tuve, Jose no la cometio.


----------



## RalphA (Dec 18, 2004)

Una ultima observacion.  

Al ejecutar el codigo para Sub Test2 anterior, si el cursor no esta en la posicion A4, al ejecutar la linea 
Range("A4").Select 
el cursor se coloca sobre A4, pero el movimiento invoca a otro Sub, el
Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
de manera que, si ese Sub tiene algun codigo, ese codigo tambien sera ejecutado.  Me parece que el metodo del Sub Text es mucho mejor que el de Sub Test2.  Comentarios?


----------



## josevaldesv (Dec 18, 2004)

Creo que ya era hora de regresar...

Veo que han pensado mucho en mi propuesta de problema, y he intentado aplicar las formulas que uds me dan, pero sigue sin servirme.. tengo errores al correr la macro.

Voy a facilitar la propuesta, con una fórmula diferente:

Sub Place_formula_in_cell() 
Range("R4").Select 
ActiveCell.FormulaR1C1 = _ 
"=IF(RC[-7]>=R1C12,10,0)"
Range("R5").Select 
End Sub

Esta fòrmula que puse SÍ SIRVE, 
pero si pongo "=IF(RC[-7]>=R1C12,"tienes califiación de "&1,"reprobaste con "&0&" puntos")"

entonces lo que CREO que es el problema, es el uso de COMILLAS "" dentro de la fórmula... 

alguna propuesta?
Lo de la logica de las formulas, no se preocupen, yo necesito todo eso para mi trabajo... yo no creo que se quieran meter en TODO eso, pues es algo complicado, jaja, pero si en vacaciones quieren tomar un tiempo extra. avisenme....

Gracias por el apoyo.. ciao


----------



## RalphA (Dec 18, 2004)

Bueno, Jose, ya he experimentado con varias formas de tratar de resolver su problema.  En cuanto al ultimo planteado por usted, yo trate esto:


```
Sub Test4()
  Range("A4").Value = "=IF(RC[-7]>=R1C12,""tienes califiación de ""&1,""reprobaste con ""&0&"" puntos"")"
End Sub
```
y tuve algunos problemas.  Experimentando un poco, decidi que su RC[-7] significaba "la celda 7 columnas a la izquierda de A4", lo cual no tiene sentido, y lo cambie por RC[+5].  Entonces, la formula que aparece en A4 resulto ser:
=IF(F4>=L1,"tienes calificación de 1","reprobaste con 0 puntos"), y todo trabaja perfectamente. 

Como ve, en mi ejemplo Test4, solamente se necesita una linea de codigo, y hasta se puede usar el ".Value" que use yo, que resulta un poco menos enredado y mas facil.

Como usted dijo, el problema en su ultimo ejemplo es question de doble comillas, como tengo en mi Sub Test4.  Pero, tambien su RC[-7] creo que es un problema, no?

Su primera presentacion quiza funcionara correctamente si usa las doble comillas, "".


----------



## Greg Truby (Dec 20, 2004)

José.  Tengo que admitir que no tengo ni la menor idea que supuestamente debe hacer tal fórmula.  Pero creo que lo que sigue lo hizo bien...

<font face=Courier New><SPAN style="color:#00007F">Sub</SPAN> Place_formula_in_cell()
    Range("R4").FormulaR1C1 = _
        "=IF(IF(IF(RC[-7]>=R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12," & _
        "DAYS360(R1C12,RC[-7]),""nw""),""p"")<=R1C12,IF(RC[-7]>R1C12," & _
        "IF((DAYS360(R1C12,RC[-7]))<=R1C12,DAYS360(R1C12,RC[-7])" & _
        ",""nw""),""p""),""-"")<>""-"",""start in ""&" & _
        "IF(IF(RC[-7]>R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12," & _
        "DAYS360(R1C12,RC[-7]),""nw""),""p"")<=R1C12," & _
        "IF(RC[-7]>R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12," & _
        "DAYS360(R1C12,RC[-7]),""nw""),""p""),""0""),"""")"
<SPAN style="color:#00007F">End</SPAN> <SPAN style="color:#00007F">Sub</SPAN>
</FONT>

Celda R4 quedó con:
=IF(IF(IF(K4>=$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p")<=$L$1,IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p"),"-")<>"-","start in "&IF(IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p")<=$L$1,IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p"),"0"),"")

...que según la comparación que hice contra lo que usted escribió en su primera pregunta es la mismitita.

HTH


----------



## Greg Truby (Dec 20, 2004)

Y para explicar un poco.  Lo que hice fue copiar la fórmula que usted escribió en notación A1 y lo metí en la celda R4.  Luego usando Tools | Options... | General | R1C1 reference style cambié Excel para que me mostrara la fórmula en notación R1C1.  Copié la fórmula al Clipboard y hice un Paste en el VBE.  Puse un " doble para cada " que aparace en la fórmula y púm, allá está.


----------



## josevaldesv (Dec 20, 2004)

Ralph, lo de 7 celdas a la izquierda está bien, ya que comienzo en R4, pero tomando consejos, mejoré la fórmula.

Greg, si no se tiene el archivo completo, es casi imposible saber qué hace la fórmula (been working on it for quite a while), pero en resumen, mi único error era el no tener DOBLE COMILLAS.

Ya poniendo doble comillas en la macro, se arregló todo.

Ahora le quito el 70% de tamaño a todos mis archivos.. gracias por la paciencia, jaja, que estuvo divertido..


----------



## josevaldesv (Dec 17, 2004)

Cheers mates..
Estoy un poco perdido..
intento hacer lo siguiente, y no me sale...
Esta es toda mi macro... en fórmulas más chicas sí me ha salido...
La fórmula, una vez puesta, corre correctamente
lo que no corre es la macro

any suggestions?

Saludos...
jose valdes

Sub Place_formula_in_cell()
'I want this macro to place the formula
'=IF(IF(IF(K4>=$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p")<=$L$1,IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p"),"-")<>"-","start in "&IF(IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p")<=$L$1,IF(K4>$L$1,IF((DAYS360($L$1,K4))<=$L$1,DAYS360($L$1,K4),"nw"),"p"),"0"),"")
'in cell R4
'but it says it can't
    Range("R4").Select
    ActiveCell.FormulaR1C1 = _
        "=IF(IF(RC[-7]>=R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12,DAYS360(R1C12,RC[-7]),""nw""),""p"")<=R1C12,IF(RC[-7]>R1C12,IF((DAYS360(R1C12,RC[-7]))<=R1C12,DAYS360(R1C12,RC[-7]),""nw""),""p""),""-"")<>""-"" ""start in "" RC[-7]>R1C12 (DAYS360(R1C12,RC[-7])) "
    Range("R5").Select
End Sub


----------



## RalphA (Dec 20, 2004)

Comence a escribir unos comentarios mas, pero, en vista de que Jose ha podido resolver su problema, voy a dejar las cosas como estan.  

Pero si queria darle las gracias a Greg por entender el problema y resolverlo, aunque parece que Jose ya lo habia hecho, pero sin habernos dejado saber  

 a todos los participantes!


----------



## josevaldesv (Dec 22, 2004)

FELIZ NAVIDAD A TODOS!!!

La razón por la que no se los hice saber fue porque me encontraba en mi laptop, lejos del mundo del Internet, y en mis pruebas lo logré, y apenas regresé a conectarme, avisé   sorry

FELIZ NAVIDAD!


----------

