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

Preguntas similare

Leer las respuestas

#6 KL
07/07/2005 - 11:00 | Informe spam
Si senor, yo tambien creo que es esto, pero es que ni siquiera es necesario
ir celda por celda ni comprobar si la celda tiene formula (!!!) Deberia
bastar con algo asi:

for I = 0 to 8
ActiveSheet.Cells.Replace _
What:=ListaBusqueda(I), _
Replacement:=ListaReemplazo(I), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
Next I

Saludos,
KL


"Héctor Miguel" wrote in message
news:
hola, Mikel !

... sigue dejando celdas (unas 40) con formulas como la siguiente: [...]
... como tratar dichas celdas que contienen formulas como textos [...]



otra 'posibilidad' [que 'me salta' al revisar el codigo expuesto] es...
-> dentro del bucle estas haciendo la referencia a 'la celda' como la
celda 'activa'...
> 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





'eso' significa que [por codigo] la celda 'activa' [supongo que son las
que tengan formulas]
-> esta siendo ->seleccionada<- en cada paso del bucle -?-

'serviria' si expones 'que hay' de instrucciones en el codigo ANTES [y
despues] del bucle for I = 0 to 8
comentas?
saludos,
hector.

Respuesta Responder a este mensaje
#7 mbergaretxe
07/07/2005 - 11:08 | Informe spam
Hola grupo,

KL, he probado las 2 funciones diferentes que me has dado en tus mensajes
anteriores con ejemplos concretos (sin bucle alguno). El algunas celdas
(no se si en las más largas o en las que necesaitan varios reemplazos
diferentes) no me hace cambio alguno (en otras sí).

Como os comenté, si intento realizar el reemplazo con el propio menú de
Excel, no realiza el cambio, dando como error "Función no válida". Si
realizo el cambio "a mano", no me da error alguno.
Si hago el mismo proceso con la macro, no me da error alguno pero no
realiza el proceso de reemplazo.

Siento haber abierto 3 hilos diferentes, a veces no he encontrado la forma
de responder en el grupo y he tenido que crearlos (soy nuevo).

Gracias de nuevo por vuestro tiempo. Mikel



Mikel wrote:

Hola Hector,

Mas o menos esta sería la función de la macro que realiza los reemplazos
en 30 columnas de las hojas del libro (en algunas lo hace bien y en otras
no hace nada):

For Each HojaActual In LibroActual.Worksheets
HojaActual.Unprotect
HojaActual.Activate
For NumeroColumna = 1 To 29
Contador = 1
CaracterCelda = ListaCeldas(NumeroColumna - 1)
CeldaActual = CaracterCelda + CStr(Contador)
Range(CeldaActual).Select
Do
If ActiveSheet.Range(CeldaActual).Locked Then
ActiveSheet.Range(CeldaActual).Locked = False
End If
If ActiveCell.HasFormula Then
For I = 0 To 7
ActiveCell.Replace _
What:=ListaReemplazo(I), _
Replacement:=ListaBusqueda(I), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
ActiveCell.Replace _
What:=ListaReemplazo(I), _
Replacement:=ListaBusquedaDolar(I), _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
MatchCase:=False
Next I
End If
Contador = Contador + 1
CeldaActual = CaracterCelda + CStr(Contador)
Range(CeldaActual).Select
Loop While Not Contador > 300
Next NumeroColumna
HojaActual.Protect
Next HojaActual

Héctor Miguel wrote:

> hola, Mikel !

> > ... sigue dejando celdas (unas 40) con formulas como la siguiente: [...]
> > ... como tratar dichas celdas que contienen formulas como textos [...]

> otra 'posibilidad' [que 'me salta' al revisar el codigo expuesto] es...
> -> dentro del bucle estas haciendo la referencia a 'la celda' como la celda
'activa'...
> >> > 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

> 'eso' significa que [por codigo] la celda 'activa' [supongo que son las que
tengan formulas]
> -> esta siendo ->seleccionada<- en cada paso del bucle -?-

> 'serviria' si expones 'que hay' de instrucciones en el codigo ANTES [y
despues] del bucle for I = 0 to 8
> comentas?
> saludos,
> hector.
Respuesta Responder a este mensaje
#8 Héctor Miguel
07/07/2005 - 11:14 | Informe spam
hola, KL !

... pero es que ni siquiera es necesario ir celda por celda ni comprobar si la celda tiene formula (!!!) Deberia bastar con algo asi [...]



[creo que] sera 'mejor' si le 'adelgazas' el codigo que esta usando :D
[p.e.] dentro del bucle tiene DOS instrucciones de 'reemplazo' para la misma matriz 'de busqueda' -?- [y etc. etc. etc.] :D

saludos,
hector.
Respuesta Responder a este mensaje
#9 KL
07/07/2005 - 11:32 | Informe spam
HM,

[creo que] sera 'mejor' si le 'adelgazas' el codigo que esta usando :D
[p.e.] dentro del bucle tiene DOS instrucciones de 'reemplazo' para la
misma matriz 'de busqueda' -?- [y etc. etc. etc.] :D



...pero es que creo/intuyo que se podria prescindir de un 80% de las
instrucciones y cambiar el codigo radicalmente, cosa que no me atrevo a
hacer hasta entender porque fallan las instrucciones basicas :-) Creo que ya
es hora de pedir muestra del archivo por correo - visto el ultimo codigo
(que, por cierto, sigue incompleto) parece que hay demasiados factores que
podrian interferir en el funcionamiento del codigo :-D

Mikel,

Te importaria enviarme el fichero al
quitando NOSPAM y PLEASE?

Saludos,
KL
Respuesta Responder a este mensaje
#10 Héctor Miguel
07/07/2005 - 11:42 | Informe spam
hola, KL !

... pero es que creo/intuyo que se podria prescindir de un 80% de las instrucciones y cambiar el codigo radicalmente
cosa que no me atrevo a hacer hasta entender porque fallan las instrucciones basicas :-)
Creo que ya es hora de pedir muestra del archivo por correo - visto el ultimo codigo (que, por cierto, sigue incompleto) [...]



en el mensaje 1 de este [nuevo] 'post'... OP menciona que...
"... La hoja no la puedo exponer porque es de un cliente y debería pedirlo permiso, etc etc. "

estoy [totalmente] de acuerdo en que se podria/debe/... 'prescindir' de un 'buen' porcentaje del codigo 'actual'
[aunque... supongo que] con lo que se ha expuesto [hasta el momento] 'debiera ser'... 'suficiente' ??? :-(

saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida