¿Cómo hago para que una macro creada en una ubicación funcione en otra?

De todoexpertos,

Tengo una macro promedio.xlsm que se ejecuta en el siguiente directorio c:\tareas, y esta macro abre los siguientes archivos tareas1.txt y tarea2.txt, toma los valores de determinadas columnas y hace el promedio en mi macro, el problema que tengo es que anteriormente si yo cambiaba de directorio la macro por ejemplo a "c:\pruebas" y la ejecutaba desde allí para abrir los archivos tareas1.txt y tareas2.txt ella se ejecutaba, pero ahora no lo hace. ¿Alguien me podría indicar por favor que opción de excel esta dehabilitada? Como mencione anteriormente la macro funcionaba pero ya no lo hace.

Respuesta
1

No es ninguna opción... La macro que tienes no está grabada con la ruta actual de los archivos..

Fíjate en la macro la instrucción que abre los archivos... debe ser algo como:

Workbooks.Open "tareas1.txt"             o

Workbooks.Open "C:\tareas\tareas1.txt"

Tienes que programar de tal manera que

a) Si usas la primera opción todos los archivos estén en la misma carpeta

o

b) Si usas la segunda manera, poner la ruta exacta donde están los archivos tareas1.txt y tareas2.txt... Verifica... o has movido los archivos o has equivocado la ruta.

No veo como la macro podría haber dejado de funcionar... lo más probable es que te muestre un error pues no encuenta el archivo...

Amigo Jaime, Gracias por tu respuesta, tienes razón revisando bien mi macro entendí que me explique mal. (Por cierto soy muy nuevo con estos de las macros y programación en VBA)

La macro corre perfectamente, lo que no se actualiza es la ruta de la ubicacion de los archivos, anteriormente si lo hacia. Ejemplo yo guardaba el archivo que contiene la macro en "c:\x" y siempre y cuando mis arechivos tareas1.txt y tareas2.txt estuviesen alli, las rutas en mi hoja de excel se actualizada con la nueva ubicacion del archivo, es decir, mi celda "A2" contenia =AVERAGE('C:\tareas\[tareas1.txt]tareas1'!$A$1:$A$20)

y mi celda A3 contenia =AVERAGE('C:\tareas\[tareas2.txt]tareas2'!$A$1:$A$20) 

Anteriormente cuando movia mi archivo de excel, el que contiene la macro, a otro directorio por ejemplo "C:\promedios", mi celda A2 se modificaba automaticamente asi =AVERAGE('C:\promedios\[tareas1.txt]tareas1'!$A$1:$A$20) y mi celda A3 quedaba asi =AVERAGE('C:\promedios\[tareas2.txt]tareas2'!$A$1:$A$20).

El problema que tengo es que ya excel no actualiza los vínculos de esa manera

Gracias por tu tiempo

Por cierto, en el comentario en lugar de "c:\x" es "C:\tareas"

gracias

Cuando todos los archivos están juntos, Excel no graba la ruta absoluta del archivo, sino solo el nombre del archivo...

Quizás en algún momento se crearon fórmulas estando los archivos en carpetas diferentes, y allí se rompió ese "vinculo"...

Prueba colocar todos los archivos juntos otra vez, y modifica la fórmula borrando toda la parte de ruta

Por ejemplo si la fórmula dice

=AVERAGE('C:\promedios\[tareas1.txt]tareas1'!$A$1:$A$20) 

conviertela en 

=AVERAGE('[tareas1.txt]tareas1'!$A$1:$A$20)

Luego graba

Efectivamente Jaime, cuando el archivo esta abierto la ruta que muestra la celda es =AVERAGE('[tareas1.txt]tareas1'!$A$1:$A$20) sin embargo cuando cierro el archivo .txt la ruta se convierte en =AVERAGE('C:\promedios\[tareas1.txt]tareas1'!$A$1:$A$20) . Como comente, anteriormente los valores en las celdas se actualizaban siempre y cuando mis archivos txt estuviesen en la misma ubicacion, ahora no lo hace.

Debe ser alguna opcion que deshabilite con otra macro por ejemplo algo como esto:

Application.screenupdating=False
Application.calculation=xlCalculationManual
Application.EnableEvents=False
ActiveSheet.DisplayPageBreaks = False

Aunque, ya me asegure que todo eso estuviese asi:

Application.screenupdating=True
Application.calculation=xlCalculationAutomatic
Application.EnableEvents=True
ActiveSheet.DisplayPageBreaks = True
Application.CutCopyMode = False

Me explico, yo podía tener en cualquier carpeta mi archivo excel que contiene las fórmulas en las celdas, los vínculos en las celdas se actualizaba automáticamente colocando la nueva ruta de ubicación del archivo excel.

Las opciones que muestras no deberían haber creado el problema (no lo puedo asegurar sin ver las macros que tienes).

El problema del vinculo ya esta creado... tienes que rearmarlo.

No me queda claro si finalmente van a estar todos los archivos en la misma carpeta o no...

Si van a estarlo, y eventualemente se muevan (PERO TODOS JUNTOS), prueba hacer lo que te digo.

Si pueden estar juntos y después no, no hay como mantener los vínculos dinámicos, deberías cambiarlos, con macros o con Ctrl+L

Si finalmente vuelves a "generar" el vínculo entre archivos... y quieres cambiar arbrariamente al ubicación de algunos, lo que tienes que hacer es abrir todos y usando Guardar como cambiar aquellos que se moverán... y luego usar Guarda con TODOS otra vez.

Los archivos siempre van a estar juntos, solo que necesito cambiarlos de ubicación

Ejemplo: "C:\tareas" la primera vez, "c:\resultados" la segunda vez y así sucesivamente. Esto, debido a que el contenido de los archivos tareas1.txt y tareas2.txt es distinto para cada carpeta.

Ábrelos todos y borra la parte de la ruta en las fórmulas como mencioné en la respuesta

Si, ya lo hice y la celda me queda así:

=AVERAGE(tareas.txt!$A$2:$A$20)

sin embargo, cuando cierro el archivo, se vuelve a convertir a esto:

=AVERAGE('C:\data\[tareas1.txt]tareas_001'!$A$2:$A$20)

Si, ya lo hice y la celda me queda así: (error de tipeo en el anterior)

=AVERAGE(tareas1.txt!$A$2:$A$20)

sin embargo, cuando cierro el archivo, se vuelve a convertir a esto:

=AVERAGE('C:\data\[tareas1.txt]tareas1'!$A$2:$A$20)

Tengo otra pregunta, existe alguna manera de cambiar con una macro el contenido esas celdas?

=AVERAGE('C:\data\[tareas1.txt]tareas1'!$A$2:$A$20)

por ejemplo, cambiar la ruta? quiero hacerlo usando una macro ya que tengo data hasta la columna AN y la fila 360.

Quiero escribir en la hoja 1 la nueva ruta de mis archivos txt y que esta se actualice en todas las celdas. y que queden las celdas de la siguiente manera

=AVERAGE('C:\nueva_ruta\[tareas1.txt]tareas1'!$A$2:$A$20)

El comando Reemplazar (Ctrl + L) hace la sustitución de todo lo que esté en las celdas... pero no de los valores de las celdas, sino de lo que se vea en la barra de fórmulas... así, bastaría con hacer Ctrl+L y colocar (por ejemplo...

En buscar

C:\data\

y en reemplazar

C:\nueva_ruta

Cuando es un comando que vas a ejecutar por una única vez... no tiene sentido hacer una macro... una vez lo haces y listo...

Si quieres hacerlo, pensando que en un futuro lo volverás a ejecutar... prendes la grabadora de macros... ejecutar el comando... y apagas la grabadora... se autogenera un código que lo puedes reutilizar (inclusive modificándolo) en otra oportunidad...

Para el caso pedido el código será algo como: (adapta A2:AN360 al verdadero rango que tienes):

Sub Macro1()
'
' Macro1 Macro
'
'
    Range("A2:AN360").Select
    Selection.Replace What:="C:\data\", Replacement:="C:\nueva_ruta\", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
End Sub

Muchas Gracias por tu ayuda Jaime, tuve que modificar el código así:

Sub Macro1()
'
' Macro1 Macro
'
Application.DisplayAlerts = False
Range("A2:AN360").Select
Selection.Replace What:="C:\data\", Replacement:="C:\nueva_ruta\", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Application.DisplayAlerts = True
End Sub

(Application.DisplayAlerts = False) Esta nueva linea para evitar que excel me pidiera abrir el archivo al momento de cambiar la ruta.

(Application.DisplayAlerts = True) y esta nueva linea para volver todo a como estaba.

Saludos y feliz día.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas