Macro para ejecutar macros de libros en una carpeta

Buenas!

He de decir que soy muy novata en excel, por lo que hablo con poco conocimiento.

El caso es que tengo una carpeta con tres ficheros Excel. Cada uno de ellos tiene dos macros en su interior (macro1 y macro2).

Necesito crear un fichero adicional, que contenga una macro que sea capaz de abrir uno por uno los tres ficheros y ejecutar sus macros correspondientes.

He utilizado el siguiente código:

Sub Test()
 ChDir (ThisWorkbook.Path)
 arcact = ThisWorkbook.Name
 Dim arch As String
 arch = Dir("*.xls")
 Do Until arch = ""
 If arch = arcact Then GoTo Salto
 Application.Run "'" & arch & "'" & "!" & "MACRO1"
 Application.Run "'" & arch & "'" & "!" & "MACRO2"
 Windows(arch).Close
Salto:
 arch = Dir
 Loop
 For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close savechanges:=False
End If
Next w
ActiveWorkbook.Close False
 End Sub

Pero me devuelve un error diciendo que es imposible encontrar el fichero Xl000000.xls!MACRO1. (Lógico, el fichero no existe)...pero no se porque busca ese archivo.

Muchas gracias!

1 Respuesta

Respuesta

Para tu tranquilidad la macro funciona correctamente.

Ese 'nombre' de libro corresponde a algún libro mal cerrado (de recuperación) y que debe estar oculto seguramente.

Podés pasar tus 3 libros + el principal a otra carpeta nueva y probarlo.

O podés modificar las 'opciones de carpeta' para que te muestre los archivos ocultos. Desde cualquier directorio, debajo de la barra de títulos verás otra que empieza con Archivo, Edición, ... Herramientas. Allí Opciones de carpeta, Mostrar todos los archivos ocultos.

Comentame si lo resolviste.

Sdos

Elsa

Hola!

Ante todo, muchas gracias por tu respuesta.

He probado a mirar lo que indicas y lamentablemente no funciona.

He creado una nueva carpeta y eliminado archivos temporales y no funciona.

De todas formas he observado lo siguiente:  Cuando borro los archivos temporales, lanzo una vez la macro y parece que arranca (abre una hoja de Excel), pero no hace nada. Cuando lo intento por segunda vez, ya me lana el error 1004 indicando que no se puede encontrar el fichero Xl000000.xls!MACRO1. Entiendo que es porque en ese segundo intento, ya ha generado un temporal.

Alguna otra idea sobre que puede estar causando este problema?

Muchas gracias y saludos!

Indicame la ruta de todos tus libros, tanto el de la macro como el resto a capturar.

Luego escribime (mi correo aparece en mi sitio) o dejame un correo tuyo, para que pueda enviarte la carpeta.

Sdos

Elsa

Hola,

He puesto los cuatro ficheros (los 3 que contienen la macro + el que pretende lanzarlas) están en la misma carpeta para evitar problemas.

La ruta es Z:\Documentos\Prueba (es un servidor)

Observo que si ejecuto la macro en local funciona, el problema esta en cuando lo hago desde el servidor. ¿Qué podría ser?

Gracias de nuevo!

Debes indicarle también la ruta en ese caso:

arch = Dir(ruta & "\*.xls")

Te dejo otro ejemplo de bucle, también probado en un servidor:

Sub Test()
 Dim arch As String
arcact = ThisWorkbook.Name
ruta = ActiveWorkbook.Path
ChDir ruta & "\"
arch = Dir(ruta & "\*.xls")
Do While arch <> arcact And arch <> ""
Workbooks.Open arch
 Application.Run "'" & arch & "'" & "!" & "MACRO1"
 Application.Run "'" & arch & "'" & "!" & "MACRO2"
 Windows(arch).Close
 arch = Dir()
 Loop
 For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close savechanges:=False
End If
Next w
ActiveWorkbook.Close False
 End Sub

Sdos
Elsa

Hola! Muchas gracias por tu respuesta de nuevo.

Estoy fuera y sin ordenador por una semana, pero no dudes que en cuanto vuelva, te cuento por aquí que tal me ha ido la macro con tu código!

Gracias de nuevo!

Hola!

he probado la macro que me ponias, pero no parece arrancar. Al lanzarse no me da ningun error, pero tampoco hace nada... Que puede causar este comportamiento??

De nuevo, muchas gracias por tu ayuda.

saludos!

Enviame un mail (aparece en mi sitio sino dejame tu correo aquí) para que te adjunte carpeta con archivos para ejecutar la macro y así podrás evaluar cual será el problema.

Sdos

Elsa

Te envié modelo... la macro quedaría así:

Sub Test()
Dim arch As String
arcact = ThisWorkbook.Name
ruta = ActiveWorkbook.Path & "\"
ChDir ruta
arch = Dir("*.xls")
Do While arch <> arcact And arch <> ""
Workbooks.Open ruta & arch
 Application.Run "'" & arch & "'" & "!" & "MACRO1"
 Application.Run "'" & arch & "'" & "!" & "MACRO2"
 Windows(arch).Close
 arch = Dir()
 Loop
For Each w In Workbooks
If w.Name <> ThisWorkbook.Name Then
w.Close savechanges:=False
End If
Next w
ActiveWorkbook.Close False
End Sub

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas