Macro reemplazar Formula

07/07/2005 - 08:31 por mbergaretxe | Informe spam
Hola grupo, especialmente a ti KL que tanto me has ayudado.

Creo saber donde se produce el problema (pero no la solución).

Vuelvo a explicarlo (a ver si esta vez más claramente). Utilizo el
procedimiento que KL me pasó como ejemplo:

Sub Test2()


If ActiveCell.HasFormula Then
ActiveCell.Replace _
What:="CALL(G2,", _
Replacement:="AnguloARadiens(G2,", _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
End If
End Sub





Estas líneas de código están dentro de un bucle (de 0 hasta 8). Los datos
de búsqueda (de 0 a 8) los tengo en un array y los de reemplazo en otro.

El problema está en que cuando se produce uno de los 8 posibles reemplazos
(la celda aún está sin reemplazar del todo), Excel evalua la formula como
no válida.

Mi código es algo así:

for I = 0 to 8
If ActiveCell.HasFormula Then
ActiveCell.Replace _
What:=ListaBusqueda(I), _
Replacement:=ListaReemplazo(I), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
End If
Next I

donde ListaBusqueda(0) = "Funcion1("
donde ListaBusqueda(1) = "Funcion2("
donde ListaBusqueda(2) = "Funcion3("
...

y
ListaReemplazo(0) = "FuncionAntigua1("
ListaReemplazo(1) = "FuncionAntigua2("
ListaReemplazo(2) = "FuncionAntigua3("

..

Así al realizar un reemplazo de la siguiente Celda:

X1 por ejemplo
=FuncionAntigua1(...;FuncionAntigua2(...;FuncionAntigua5(...)
serían necesarios 3 pasos correctos del bucle, cuando terminase el mismo,
la celda quedaría con los valores
=Funcion1(...;Funcion2(...;Funcion5(...), pero no realiza ninguno de los 3
cambios necesarios aunq ListaBusqueda(I) tiene el valor correcto que se
busca (lo he trazado, paso por la línea de replace pero no lo hace).

No se si habrá quedado muy claro. Espero que si. La hoja no la puedo
exponer porque es de un cliente y debería pedirlo permiso, etc etc

Gracias por toda vuestra ayuda. Mikel
 

Leer las respuestas

#1 Héctor Miguel
07/07/2005 - 08:53 | Informe spam
hola, Mikel !

... lineas de codigo... dentro de un bucle (de 0 hasta 8)
... datos de busqueda... en un array y los de reemplazo en otro.
for I = 0 to 8
If ActiveCell.HasFormula Then
ActiveCell.Replace _
What:=ListaBusqueda(I), _
Replacement:=ListaReemplazo(I), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
End If
Next I
donde ListaBusqueda(0) = "Funcion1("
donde ListaBusqueda(1) = "Funcion1("
donde ListaBusqueda(2) = "Funcion3("
...
ListaReemplazo(0) = "FuncionAntigua1("
ListaReemplazo(1) = "FuncionAntigua2("
ListaReemplazo(2) = "FuncionAntigua3("
..
... al realizar un reemplazo de la siguiente Celda: X1 por ejemplo
=FuncionAntigua1(...;FuncionAntigua2(...;FuncionAntigua5(...)
serian necesarios 3 pasos correctos del bucle, cuando terminase el mismo, la celda quedaría con los valores
=Funcion1(...;Funcion2(...;Funcion5(...)
... no realiza ninguno de los 3 cambios... aunq ListaBusqueda(I) tiene el valor correcto que se busca [...]



[segun se 'aprecia' de la exposicion anterior]... me parece que SOLO tienes 'invertidas' las matrices/arrays y los argumentos :))
-> el parametro 'What:=ListaBusqueda(I)'
esta buscando los valores_textos que [se supone] EXISTEN ACTUALMENTE en las celdas ["Funcion1(", "Funcion2(", etc.]
-> el parametro 'Replacement:=ListaReemplazo(I)'
'deja/cambia/sustituye/...' los valores anteriores [si los encuentra] ->por los 'nuevos'<- ["FuncionAntigua1(", "FuncionAntigua2(", etc.]

-> invierte la matriz asignada a los parametros What y Replacement ;)

saludos,
hector.

Preguntas similares